|
|
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
Подскажите, как лучше хранить номер телефона? В основном номера российских операторов. Большей частью сотовые. Номеров очень много и надо сделать ОЧЕНЬ быстрый поиск по номерам. До этого хранение было в виде текстовой строки nvarchar(11). Сейчас есть идея разбить номер на две части (оператор) + номер. Т.е. например номер 8919-123-45-67 В базе хранить в двух полях 8919 и 1234567 Сами поля сделать числовыми smallint и int Т.е. что-то типа этого Код: plaintext 1. 2. 3. По обоим полям сделать индекс. И если сейчас поиск осуществляется вот так Код: plaintext Код: plaintext Будет ли быстрее? Мне кажется будет, т.к. индекс станет продуктивнее – не будет одинаковых 4 цифр. И это будет все-таки число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2010, 20:44 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
il760Будет ли быстрее? Мне кажется будет, т.к. индекс станет продуктивнее – не будет одинаковых 4 цифр. И это будет все-таки число.Не будет. Можно просто весь номер хранить в виде числа. А какие там одинаковые цифры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2010, 20:47 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
Одинаковые 8919, 8917 и что-то типа этого. Этих кодов операторов получается около 50. А в каждом таком коде по миллиону номеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2010, 21:15 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
il760Одинаковые 8919, 8917 и что-то типа этого. Этих кодов операторов получается около 50. А в каждом таком коде по миллиону номеров.А, понятно. Вообще, если уж честно, первая цифра вообще везде одинаковая (кстати, зачем хранить префис выхода на межгород???), да и вариантов вторых не очень много :-) Храните просто 9191234567 как целое число, если не планируется выходить за пределы российских номеров. Или 79191234567, если планирутся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2010, 22:57 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
il760Одинаковые 8919, 8917 и что-то типа этого. Этих кодов операторов получается около 50.Кстати, это не код оператора, а первые 3 цифры номера. Оператора по ним не определить (для всех случаев, хотя часто можно с большой вероятностью предположить). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2010, 22:59 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
il760 Будет ли быстрее?Ненамного. хотя уменьшится размер индекса 6 байт против 22 А вообще вопрос глупый ибо гораздо проще построить тестовую среду и замерить самостоятельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2010, 03:00 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
SERG1257А вообще вопрос глупый ибо ...к примеру, мой домашний телефон отзывался на 985, потом на 495, а сейчас на 499, и это ещё не конец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2010, 03:11 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
egorych к примеру, мой домашний телефон отзывался на 985, потом на 495, а сейчас на 499, и это ещё не конец. И какое это имеет отношение к поиску по номеру? Другой вопрос - всегда ли код города будет заполнен (из ddl этого не видно) будет ли поиск только по точному равенству. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2010, 03:19 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
SERG1257egorych к примеру, мой домашний телефон отзывался на 985, потом на 495, а сейчас на 499, и это ещё не конец. И какое это имеет отношение к поиску по номеру?прямое, ибо заявлено, что:il760сейчас поиск осуществляется вот так Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2010, 03:30 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
egorychхочется отметить дополнительно, что сейчас 8 ещё работает, но, вскорости нам обещают повсеместный переход на +7, а далее, на +10, а далее.Ээ... пусть об этом болит голова у аналитиков топикстартера. Вопрос был стоит ли разбивать строковый телефонный номер на два целых числа? Ответ: при поиске по точному соответсвию разница по времени отклика будет почти незаметна (ни по логическим чтениям, ни по времени отклика) хотя размер индекса должен сократится, что может повысить вероятность залезания в кэш и т.д. И предложил тупо провести эсперимент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2010, 05:54 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
egorychно, вскорости нам обещают повсеместный переход на +7 , а далее, на +10, а далее... Какой еще +10? Краткий ликбез. Полный телефонный номер состоит из кода страны, номера зоны и номера абонента. В России код 7, номер зоны состоит из 3-5 цифр, номер абонента занимает еще 7-5 цифр. Если оба абонента находятся в одной зоне (в применении к ТФОП), то можно набирать просто номер абонента. Если нужно абоненты находятся в разных зонах, то нужно вначале набрать 8, что означает выход на междугороднюю линию, после чего набрать номер зоны и номер абонента. Если абоненты находятся в разных странах, то нужно набрать 8, затем 10 (выход на международную линию), после чего набрать номер зоны и номер абонента. Знак + означает выход сразу на международную линию. Таком образом, +7 соответствует 8-10-7. +10 вообще никуда не попадет, потому что 1 — это код США или Канады, но номер зоны не должен начинаться с 0 (обычно 0 означает выход на международную линию в проводных аппаратах, в которых нет символа "+"). Лично я бы не парился и хранил строкой. Но код страны, код зоны и номер абонента хранил бы в трех разных полях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2010, 11:34 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
Храните номера в Е164, т.е. код_страны + код_города + номер_абонента (итого должен получиться номер из 11 знаков; код России - 7, код США например - 1 и т.д.; все эти коды известны - операторы по ним тарифицируют звонки). И не будет никаких проблем. А все ваши манипуляции с "8" (вызов межгорода) и "810" (международный вызов) - это просто правила трансляции на вашей АТС-ке. Грубо говоря, если абонент вашей АТС-ки набрал номер "1234567", то реально это номер 74951234567 (например если ваша АТС в москве с кодом 495); если кто-то набрал номер 84882123456 (из 11 знаков), то вы должны его транслировать в межгород 74882123456 (код города 4882); если кто-то набрал "81012222333333" (из 14 знаков), то вы его транслируете в междунароный звонок на номер "12222333333" (т.е. отрезаете "810" и получается звонок куда-то в Америку/Канаду). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2010, 12:05 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
Dim666, Alibek B., Это, конечно, хорошая идея - хранить код города или региона, только вот откуда их узнать? Узнать-то можно (есть всякие официальные планы нумерации), но это увеличит объём работы и при этом непонятно зачем, раз требований к работе с кодами регионов нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2010, 17:36 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
На самом деле, если телефон указан в полном формате, узнать легко. Загружаете полный список кодов (он есть в открытом доступе, например на сайте mtt.ru), сортируете их по длине кода (по убыванию) и сверяете один за одним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2010, 19:22 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
А для простоты можно даже считать код зоны трехзначным. Есть четырехзначные и пятизначные зоны, но во-первых их не так много, а во-вторых, они все-равно сгруппированы географически вокруг первых трех цифр. Раньше была даже возможность выхода на "местную междугороднюю линию". Если, к примеру, есть область/регион, в которой есть несколько городов с кодами 123-22, 123-71, 123-72, 123-73, 123-79, для набора номера можно было использовать 8-123-73-##### или 8-2-73-#####, последний вариант работал только внутри области/региона. Поэтому даже если полный номер на самом деле 7-12373-12345, то не будет большой ошибки записать его как 7-123-7312345. Местные или рядом проживающие и так поймут, а далекопроживающим все равно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2010, 19:29 |
|
||
|
Как хранить телефон?
|
|||
|---|---|---|---|
|
#18+
Alibek B.А для простоты можно даже считать код зоны трехзначным. Есть четырехзначные и пятизначные зоны, но во-первых их не так много, а во-вторых, они все-равно сгруппированы географически вокруг первых трех цифр. Раньше была даже возможность выхода на "местную междугороднюю линию". Если, к примеру, есть область/регион, в которой есть несколько городов с кодами 123-22, 123-71, 123-72, 123-73, 123-79, для набора номера можно было использовать 8-123-73-##### или 8-2-73-#####, последний вариант работал только внутри области/региона. Поэтому даже если полный номер на самом деле 7-12373-12345, то не будет большой ошибки записать его как 7-123-7312345. Местные или рядом проживающие и так поймут, а далекопроживающим все равно.В принципе разумно. Лучьше даже для простоты считать код зоны однозначным - тогда он будет влезать на один экран, и справочник будет маленьким, для быстродействия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2011, 02:24 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37043195&tid=1542376]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
394ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 195ms |
| total: | 711ms |

| 0 / 0 |
