|
|
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Сабж. Номер телефона может начинаться с одного или нескольких нулей. Разумеется, строковое представление неприемлимо. Мне пришла мысль хранить его в виде нецелого числа, и всю работу приложения строить с такими числами, а только на клиенте преобразовывать в человекочитаемый вид. Какие будут ещё идеи? Решающий фактор - минимальный объём, занимаемый данными, максимальная скорость работы с таким типом данных. Oracle 9 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 12:31 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
А как в числовом варианте хранить паузу, например: 8W0951111111 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 12:34 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Пофиг. Это не есть компонента номера телефона. Но сейчас подумал, что номер 10 и номер 100 - не одно и то же. Как бы извернуться? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 12:35 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Разумеется, строковое представление неприемлимо А можно объяснить, почему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 12:40 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
tru55 Разумеется, строковое представление неприемлимо А можно объяснить, почему авторфактор - минимальный объём, занимаемый данными, максимальная скорость работы с таким типом данных билинг скорее всего...а там этих номеров.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 12:47 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
целыми хранить количество нулей, или ноль если он один, дробная часть - все остальное... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 12:51 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
10 и 100 те же извращения на тему LZW... сначала 0 за ним количество ... максимум получается 9 нулей... думаю хватит.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 12:55 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Да, хорошая мысль, спасибо. В обобщённом виде нужно написать обратимую функцию, преобразующую номер телефона в уникальное число. Действительно, биллинг. На десятках миллиардов строк даже 1 сэкономленный байт погоду делает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 13:05 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
А как генерить отчеты, выгрузки и т.п. Не достанет каждый раз преобразовывать к нормальному виду? Внутри биллинга я бы хранил справочник телефонов: код(счетчик); номер телефона (текстовый) Сжатый номер (для передачи больших объемов на клиента) Соответственно все ссылки по коду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 13:14 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
[quot Scott Tiger]В обобщённом виде нужно написать обратимую функцию, преобразующую номер телефона в уникальное число. /quot]номер телефона и есть уникальное число... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 13:19 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> Разумеется, строковое представление неприемлимо. Кем разумеется? В данном случае - это единственно правильное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 15:18 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Номер телефона не есть число, а есть последовательность цифр, в которой позиции в голове и хвосте могут == 0, но при этом быть значащими. Например, телефон 00700. Если предстваить это в виде числа, это будет число 700, а есть такой номер 700, который совсем не то, что 00700 и 0700, например. Ну и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 15:20 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Строковое представление - это 11 байт. Много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 15:21 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Мной разумеется. А что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 15:27 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Справочник тоже не есть хорошо. Это потом джойнить голову сломаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 15:54 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> Мной разумеется. Печально. > Строковое представление - это 11 байт. Много. Почему именно 11 байт? В сравнении с чем много? Для Вашей задачи хорошее решение одно: таблица телефонных номеров, ссылки на эту таблицу в логах. Все остальные решения - кривые до безобразия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 16:08 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Аргументы будут? Много в сравнении, например, с числом. 10-значный телефонный номер в числовом представлении занимает 7 байт, а в строковом - 11. Итого - 4 байта оверхед. В таблице, положим, 2 номера - кто звонил и кому. Итого, 8 байт на строку. На 10 миллиардов строк имеем почти 80 гигабайт. Оно мне надо?. Со справочником я уже говорил - джоинить замучаюсь, если потребуется. Да и зачем? Проще и производительнее применить функцию - ни тебе чтений (даже логических), ни конкатенации строк, только raw cpu power :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 16:47 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Беда в том, что есть как телефоны типа 10 и 100, так и типа 02 и 03. ;-))) А если функции написать, которые из 11^11 (11 символов 0...9 или пусто) конвертят в 255^5 (5 символов binary character, кроме chr(0), например) и обратно? 5 символов хватит при таком раскладе. Правда, все равно не очень быстро, но и не очень медленно ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 16:59 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, что пишу на WatcomSQL, так как PL/SQL не сильно знаю, но думаю что по функциональности будет один в один: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Комментарии: В ASA тип numeric - плавающий десятичный тип, то есть он занимает ровно столько места, сколько нужно. Я его использовал для хранения телефона, где 2 цифры до знака - это длина телефона, цифры после знака - сам телефон. Функция "TRUNCNUM" сбрасывает десятичные знаки (то есть не округляет). Функция "POWER" возводит число в степень. Остальные функции думаю понятны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 17:05 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> Аргументы будут? Эссно. 1. Нормализация. 2. Компактность (не 11 байт, а 4 или 8). Из 1 вытекает 3. Возможность дополнительных манипуляций с телефонными номерами. > Много в сравнении, например, с числом. Не смешно. Я бы понял, если бы Вы приводили аргументы с учетом файловой системы, размера страницы, версии СУБД и способа хранения таблицы. > На 10 миллиардов строк имеем почти 80 гигабайт. Если есть задача хранить 10 миллиардов строк, то лишние 80 Гб погоды не сделают. Просто посчитайте накладные расходы для каждой таблицы. > Со справочником я уже говорил - джоинить замучаюсь, если потребуется. ;)) А в чем здесь проблема, если не секрет? Что значит "замучаюсь"? > Да и зачем? А зачем вообще базы данных _проектируют_? > Проще и производительнее применить функцию - ни тебе чтений > (даже логических), ни конкатенации строк, только raw cpu power :) Сравните оба варианта экспериментально. Через год, когда Вам перестанет хватать функциональности Вашего биллинга, надеюсь, Вы вспомните это обсуждение. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 17:14 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> Эссно. 1. Нормализация. 2. Компактность (не 11 байт, а 4 или 8). Ну это сворачивать если, то возможно. Тоже надо подумать. Насчёт нормализации ради нормализации не стоит, право. Как PK номер подходит, посколько не может измениться (так устроено). Не опускайтесь до уровня теоретиков от СУБД. Иначе - велкам ту су.дбмс. > Не смешно. Я бы понял, если бы Вы приводили аргументы с учетом файловой системы, размера страницы, версии СУБД и способа хранения таблицы. Причём здесь файловая система? Таблица - heap-organized. Это не единственная таблица с номером телефона и не единственная очень большая таблица. Остальное писал. > Если есть задача хранить 10 миллиардов строк, то лишние 80 Гб погоды не сделают. Просто посчитайте накладные расходы для каждой таблицы. 10 старушек - рупь. > ;)) А в чем здесь проблема, если не секрет? Что значит "замучаюсь"? Замучаюсь, значит мне для вывода, грубо говоря, отчёта какого-нибудь придётся достаточно много раз читать индекс этого справочника (это в случае, если номер телефона будет в индексе). Не будет - ещё и блоки таблицы. В целом, так или иначе, 90 процентов этого справочника будут читаться достаточно активно. Это будет худший вариант, чем хранение номера as is или в преобразованном так или иначе виде. > А зачем вообще базы данных _проектируют_? Ну явно, чтобы не гордиться степенью нормализованности :) > Проще и производительнее применить функцию - ни тебе чтений > (даже логических), ни конкатенации строк, только raw cpu power :) Сравните оба варианта экспериментально. > Через год, когда Вам перестанет хватать функциональности Вашего биллинга, надеюсь, Вы вспомните это обсуждение. ;) А при чём здесь функциональность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 17:48 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> Ну это сворачивать если, то возможно. Imho незачем огород городить. Суррогатный ключ int4 или int8. > Как PK номер подходит, посколько не может измениться (так устроено). ;) Я придерживаюсь точки зрения, что практически ни одна естественная сущность для первичного ключа непригодна. > Не опускайтесь до уровня теоретиков от СУБД. Иначе - велкам ту су.дбмс. Был, спасибо. Не интересно. > 10 старушек - рупь. Хм... imho вопрос стоит примерно так: хватит для хранения основной бд массива 4 Тб или купить сразу 8? Какие 80 гигабайт? О чем Вы? > Замучаюсь, значит мне для вывода, грубо говоря, отчёта какого-нибудь > придётся достаточно много раз читать индекс этого справочника Обязательно придется. И какие проблемы, по-Вашему, это создаст? Абонентов - максимум несколько миллионов, лог - десятки миллиардов записей (непонятно, правда, зачем все их держать в оперативной таблице). > Ну явно, чтобы не гордиться степенью нормализованности :) ;) Оно, понятно, не самоцель. > А при чём здесь функциональность? А Вы сами-то как думаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 18:11 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Применить шестнащатиричную систему кодирования. В одном байте два символа. Избыточность невелика, т.к. кроме цифр надо использовать спецсимволы P, #,+. Легко кодировать и декодировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 19:52 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Усе это напомнило мне один случай. Было сие на SDW-2004. Некий умный мужик (действительно умный, мелкомягким C# сбацал, не люблю его за это, так как он щас C++ "портить" пытаетси) Herb Sutter толкал речь про оптимизацию. Был пример некого сищного цикла - так как пишут 99% (я в том числе) и было показано, где и чо можно соптимизировать - так 7, 8 итераций. После етого, сволочь така, стал спрашивать, а угадайте на скольки увеличилось то. Ну народ стал гадать типа 30-40%, самые смелые 2-3 раза предлогали. А он и выдает в 27-60 раз работает быстрее (в зависимости от компилятора, конечно). Ну все выпали в осадок, а он и добавляет, хрен гнойный "Не делайте ЭТО НИКОГДА!" . Тоесть, как писали, так и пищите, не оптимизируйте, пока это не надо. Ну и вернемся к нашим баранам. Как правило, пока базу не родили, до стресс-теста (если нужен, конечно) не доползли, об оптимизации думать рано. Конечно, кой-какой опыт имеется, кое-где сразу видно, как лучще сделать. Но такова собачья (наша) жисть, что как правило тебе ТЗ по полной программе не выдаст сначала. По ходу будуть всяки изменения и подкрутки (может и переделки). Так, что даже 4 байта на телефоне - это блохи, будут проблемы и поважнее. А вот сразу усложнять жисть себе (к примеру - нужны все телефоны с третей цифрой 1 и последними 3-мя цифрами 345, попляши ка!) ни к чему. IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 21:24 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> как писали, так и пищите, не оптимизируйте, пока это не надо. Время оптимизации настанет тогда, когда г-н Scott Tiger осознает необходимость разнесения оперативных таблиц (или баз, что лучше: MySQL для входа, Oracle - для хранилища) и архива, т. е. состоявшихся и закончившихся соединений. И будет в несколько потоков писать, и в несколько потоков этот лог разгребать. А пока речь о том, в каком виде этот лог хранить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2005, 23:25 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=40&tid=1541333]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 407ms |

| 0 / 0 |
