|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
varchar(100) тоже много. Посмотрел номера контактов на сайте Oracle У Греции номера 15 символов, скорее всего должно хватить длины 20-25символов. Greece +30.210.67.89.450 +30 210 678 9215 Hungary +36.1.2241800 3618017722 Israel +972.3.9273677 +44.207.1312.982 Italy +39.06.52436.400 39 028 733 5050 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2021, 20:49 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Alex_Toms varchar(100) тоже много. Посмотрел номера контактов на сайте Oracle У Греции номера 15 символов, скорее всего должно хватить длины 20-25символов. Greece +30.210.67.89.450 +30 210 678 9215 У Греции 12 символов, но да, по стандартам может быть до 15. Только не забывайте, что в номер могут добавляться дополнительные локальные расширения, т.е. внутренний номер компании может быть частью "полного" номера. В принципе коммутаторы рассчитаны на 18, так что можно ограничиться varchar(18). Единственно, непонятно, какой профит, сколько рублей, получит бизнес, если выберет 18 вместо 100 :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 09:56 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
спасибо большое, тогда соответственно сделаю varchar(100) - на всякий глянул статью по производительности разных длин при сортировке, кому интересно "https://habr.com/ru/post/489182/" еще может кто помочь правильно определять префикс (чтобы можно было по нему корректно определить страну , регион и оператора) может у кого уже есть наработка, не совсем понимаю как в таком разнообразии (куче) различных вариантов определить правильно эти данные ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 10:19 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Не помню какой был размер этого поля в таблице, давно не работаю с биллингом. Номера на сайте привёл для ориентира. Руководствоваться нужно согласно документации по связи, а не то что разместят на сайтах. Про дополнительные символы в номерах я уже упоминал, они бывают и их тоже приходилось учитывать. А 18 вместо 100, это чисто от разработчика. Не делай лишний размер поля если в этом нет необходимости. Деньги здесь не причём. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 10:21 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Как я определял оператора. Приходили номера например +79029159999, 89029159999 или 81079029159999. Отсекал префикс, приводил к одному виду кажется к такому 79029159999. Исходный номер не трогал, это только в расчётах. Далее для приводимого примера Для диапазона 9029150000-9029159999 в систему заносил 7902915. Далее проверял запросом select * from ( select '79029159999' P ) T where P like '7902915%' Поле P из таблицы вызовов, а 7902915 из таблицы номерной ёмкости. Работает достаточно быстро, за раз обрабатывает все записи. При обработке отсекаем обработанные записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 10:42 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Sandist еще может кто помочь правильно определять префикс (чтобы можно было по нему корректно определить страну , регион и оператора) может у кого уже есть наработка, не совсем понимаю как в таком разнообразии (куче) различных вариантов определить правильно эти данные Единственно добавлю, что справочников должно быть несколько, отдельно для стран, регионов, операторов, т.к. для страны вы можете получить правильные данные почти гарантированно, стран же немного, а вот для остального получится уже не так точно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 12:39 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
alexeyvg Sandist еще может кто помочь правильно определять префикс (чтобы можно было по нему корректно определить страну , регион и оператора) может у кого уже есть наработка, не совсем понимаю как в таком разнообразии (куче) различных вариантов определить правильно эти данные Единственно добавлю, что справочников должно быть несколько, отдельно для стран, регионов, операторов, т.к. для страны вы можете получить правильные данные почти гарантированно, стран же немного, а вот для остального получится уже не так точно. Например, для номера 74953631234 будут найдены шаблоны: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 12:49 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Хватит одного справочника, проверено на практике. Надеюсь к вечеру немного освобожусь, поищу прежние наработки, вспомню подробнее как делал. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 13:18 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Sandist, задачу можно решить несколькими способами, например, выстроить коды в порядке убывания по длине и выполнять парсинг номеров по получившемуся справочнику, по одному проходу на каждую длину. Это достаточно быстрый способ, получается не более 11 проходов по таблице. При каждом проходе пропускаете уже обработанные номера. Например, 499001 49901 4991 499 Второй способ - написать CLR функцию, в которую загрузите справочники направлений и будете парсить уже каждую строку таблицы, т.е. таблица будет обработана за один проход. Функция внутри себя будет подбирать коды также в порядке убывания длины. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 13:26 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Именно так я и делал. Сначала обрабатывал с максимальной длиной из справочника, у вас в примере 11. Далее с длиной 10, 9 и так далее до 1. Порядок должен быть такой, а не наоборот. Всего максимум 11 запросов update. При обработке исключал обработанные записи. Перед запросом update проверял, есть ли не обработанные записи, если нет, то заканчивал обработку. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 13:36 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Владислав Колосов выполнять парсинг номеров по получившемуся справочнику, по одному проходу на каждую длину. Это достаточно быстрый способ, получается не более 11 проходов по таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 13:56 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Пока занят, потом отвечу... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 13:57 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
alexeyvg, Быстрее получалось, не требуется сортировка, например. Но при условии, что памяти достаточно для буферизации необходимой части данных. Реально не 11 проходов, а меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 16:41 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Владислав Колосов Быстрее получалось, не требуется сортировка, например. Владислав Колосов выстроить коды в порядке убывания по длине и выполнять парсинг номеров по получившемуся справочнику, по одному проходу на каждую длину. Правда, тут будет только сортировка справочника, а не всего набора. В общем, интересно было бы сравнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 17:13 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
alexeyvg Правда, тут будет только сортировка справочника, а не всего набора. Т.е. по сути можно этот алгоритм "выстроить коды в порядке убывания по длине и выполнять парсинг номеров по получившемуся справочнику, по одному проходу на каждую длину." написать одним запросом: Код: sql 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 17:36 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
alexeyvg, В порядке убывания, верно, но... для курсора или цикла. сортировка справочника выполняется один раз, затем во временную таблицу алгоритм отбирает значение, соответствующие длине строки текущей итерации и ищет LIKE совпадения для update. В былые времена парсинг кодов направлений ~2млн строк на Pentium3 занимал 2-3 минуты. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 18:05 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Владислав Колосов В порядке убывания, верно, но... для курсора или цикла. сортировка справочника выполняется один раз, затем во временную таблицу алгоритм отбирает значение, соответствующие длине строки текущей итерации и ищет LIKE совпадения для update. Сортировка только один раз, при наполнении справочника. А потом тоже без сортировки "ищет LIKE совпадения", только без "во временную таблицу". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 18:15 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
alexeyvg Сортировка только один раз, при наполнении справочника. А потом тоже без сортировки "ищет LIKE совпадения", только без "во временную таблицу". Или, как вариант, сделать 11 справочников, и искать с union all ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 20:51 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
alexeyvg Или, как вариант, сделать 11 справочников, и искать с union all А зачем вообще с union all? В таблице вызовов сделать числовое поле, ссылку на справочник кодов, default(0). А далее апдейтил это поле для кодов с максимальной длиной из справочника, у вас в примере 11. Далее с длиной 10, 9 и так далее до 1. При каждом проходе записей с 0 в этом поле становилось всё меньше. При наличии в справочнике всех кодов с 0 их не будет. Всего максимум 11 запросов update. При обработке исключал обработанные записи. Перед запросом update проверял, есть ли не обработанные записи, если нет, то заканчивал обработку. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2021, 22:02 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
alexeyvg, не буду спорить, в те времена cross apply еще не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2021, 00:29 |
|
Как правильно хранить биллинговую информацию
|
|||
---|---|---|---|
#18+
Alex_Toms А зачем вообще с union all? ... При каждом проходе записей с 0 в этом поле становилось всё меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2021, 11:16 |
|
|
start [/forum/topic.php?fid=46&msg=40037207&tid=1685188]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
8ms |
get forum data: |
1ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 267ms |
0 / 0 |