|
|
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
2 Scott Tiger Если Вы так озабочены размером базы, то справочник с 4-х байтным FK ИМХО самое правильное решение. И вообще самое правильное по-моему. Вместо 7 байт получается 4. От соединений все равно не удастся избавиться, одним больше или одним меньше уже роли играть не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 01:39 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Да, меня не поняли, однако. Хранить номер надо, как есть - строчкой. Все остальное изврат. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 07:19 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
авторХранить номер надо, как есть - строчкойстрока есть последовательность чисе с основанием 255... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 08:37 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
А 4-х байтов, как я уже показал выше, не хватает. Надо 5. Решение ASCRUS всем хорошо, кроме того, что по такому числу очень сложно построить внятный индекс. Ну, например, трудно будет выбрать все номера, начинающиеся с единицы, независимо от длины номера. Хотя, как я понял, индекс в рамках решаемой задачи будет даже лишним и вредным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 10:08 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
С FK - это ещё хуже, чем строчкой хранить. Вопрос стоит в выборе из 2 вариантов - строчка как есть или строчка, упакованная тем или иным образом. Ну и ищутся другие варианты. Что касается применимости естественного ключа - номер телефона есть самостоятельная, даже самодостаточная сущность. Он сам себя уникально идентифицирует. Это как, например, номер паспорта - для идентификации другой сущности - человека - он неприменим, т.к. паспорт может поменяться или у человека вообще может не быть паспорта. А вот для идентификации бланка паспорта, т.е. книжецы краснокожей, он вполне подходит. Другой вопрос - что это не есть самый эффективный вариант с точки зрения объёма хранимой информации. Тоже и с телефонами. Номер может принадлежать абоненту, может не принадлежать, может быть привязан к какому-то оборудованию, может жить сам по себе - абонент и его оборудование идентифицируется другими методами. А номера телефонов образуют номерную ёмкость, которая может расти и сжиматься за счёт добавления и удаления номеров, и у абонента может номер изменяться - но это не изменение того номера, который у него есть сейчас, а отбор старого и выдача нового. Так оно устроено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 10:50 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Что касается поиска и т.п. - нужды находить номера каким-либо способом, кроме полного указания номера, почти нет - это нестандартные, разовые задачи, выходящие за рамки приложения. В конце концов, для таких извратов можно держать справочник вида - упакованная_строка - номер_телефона. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 10:59 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> С FK - это ещё хуже, чем строчкой хранить. Чем хуже? > Вопрос стоит в выборе из 2 вариантов - строчка как есть или строчка, > упакованная тем или иным образом. Ну и ищутся другие варианты. Понятно. Если начальный вопрос из разряда "самзнаюблянах", помечайте это, пожалуйста. Жаль бесцельно потраченного времени, честное слово. > Что касается применимости естественного ключа - номер телефона есть > самостоятельная, даже самодостаточная сущность. Хм... Вы ошибаетесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:41 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
guest_20040621 > Хм... Вы ошибаетесь. А можно описать, в чем ошибка? Я вот не заметил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 17:00 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
guest_20040621 > С FK - это ещё хуже, чем строчкой хранить. Чем хуже? Чэм Эрэван Я уже писал выше - если мне нужно зачем-то (пользовательский интерфейс, взаимодействие со внешними системами) получить номер телефона, мне нужно будет прочитать справочник. Т.е., на каждый возвращаемый номер телефона имеем по несколько логических чтений. При массовой загрузке (обработка первичных данных) всё просто ляжет, я буду работать только на вычисление PK по заданному номеру телефона. Если нет справочника - нет этих чтений. По-моему, достаточно просто объяснил. Используем свёртку - нагружаем процессор дополнительными вычислениями, не используем - не нагружаем, но перелопачиваем большее количество данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 17:13 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Уважаемые Господа, Вы меня так и не убедили, чем строчкой хранить хуже. Конечно, надо бы всем разработчикам баз подкинуть идейку добавить новый тип PHONE. Ну и FISRT_NAME, LAST_NAME, FULL_NAME, ADDRESS (можно продолжать) до кучи. А там внутри пусть хранят как хотять (как DATE, TIME к примеру). Ну и разные способы форматирования сей байды Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Ну, это из области _помечтать_. А шо до сегодняшнего дня, я тут последоватьльноси молекул храню. Для ДНА/РНА алфавит простой - всего 5 букв ACTGN. Для протеинов чуть сложнее - около 20 букв. Вот чо можно упаковывать, так упаковывать. Ан нет - накладные расходы на упаковку/распаковку съедают достаточно много. Да и в конце концов - что, места на дисках не хватает. У нас базы до 20G доходят, и ничего, шуршать себе потихоньку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 18:47 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Tiger, не слушай никого. Самое лучшее решение, запаковывать в бинари(5), по 4 бита на цифру, если напрячься - немного сложнее преобразование, то 3.5 бита на цифру, т.е. 35 бит на 10 цифр, но 4 байта не выйдет по-любому - не влезет туда 10 цифр . Емко, не надо держать внешний ключ. Т.к. Здесь нафиг ключ не нужен, если кроме телефона нет никаких свойств, сами данные и есть ключ, если нужно индекс построил - вот и ключ. Если профиль таблицы - быть свалкой, она должна быть такой. Для нее запросы типа третья цифра "5" - не профиль... Можно расширить идею, раз надо держать пару, тогда и пакуйте их парой. Тогда можно запаковать два номера по 10 цифр в 67 бит - 9 байт, т.е. по 4.5 на номер. Во как! Но такое использовать можно только в одну сторону, сами понимаете. Если возникнет необходимость в выборках по номерам, то либо через геморрой, либо через добавление распакованных полей, с переливкой из запакованных. А 80Гб - тоже объем не стоит им пренебрегать, и не важен размер базы, даже если 1Тб. А оптимизация должна быть с самого начала проектирования, а не вдогонку, когда база подошла к 100Гб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 23:54 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Году в 2000-2001-м мне довелось иметь дело с телефонной базой на ~5 млн записей на ASA 5.5. Моё ИМХО категорическое мнение -- если нужно хоть какое-нибудь быстродействие -- только строковое представление. Как можно меньше функций (арифметических). Очень хороша идея PVP -- HEX-представление, но работать также только с символьным представлением. И ещё добрый совет: по возможности забудьте о нормализации. И, разумеется, никаких FK и констрейнтов. Оставьте их для ОРАКЛа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2005, 03:33 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> При массовой загрузке (обработка первичных данных) всё просто ляжет, я буду > работать только на вычисление PK по заданному номеру телефона. Это не так. Задач в Вашем вопросе на самом деле несколько: 1. регистрация первичных данных, 2. обработка первичных данных, 3. хранение лога. Imho Вы пытаетесь решить их все сразу и одинаково, чего делать не следует, потому как это абсолютно разные задачи. Что нужно для регистрации первичных данных (будем считать, что это текущие соединения)? - скорость. Форма регистрации практически роли не играет: таких данных относительно немного, манипуляций с ними немного. Что нужно для оперативной обработки этих текущих соединений? Получить некоторые данные для конкретного абонента (остаток на счете, возможность дополнительных сервисов etc). Быстро это сделать иначе, чем имея отдельную таблицу номеров - нельзя. Что нужно для хранения лога? - удобный анализ. _Не будет_ анализ удобным, если для любого чиха Вам понадобится преобразование. Не очевидно? > Если нет справочника - нет этих чтений. Чего ж Вас чтение небольшой таблицы так пугает? Религия, видимо, мешает держать эту таблицу в памяти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2005, 04:08 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
авторИспользуем свёртку - нагружаем процессор дополнительными вычислениями а как же raw cpu power...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2005, 12:47 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Вопрос к тем кто за FK: А вы не пробовали делать справочник цен например(Код цены, Цена)? А из товаров, условно говоря, делать ссылку на справочник цен по коду цены. Очень здорово получается. Только это нафиг не нужно никому. Так и в данном случае, справочник есть смысл вводить если есть дополнительные аттрибуты, а в данном применении никаких аттрибутов нет. Есть только номер и больше ничего не нужно. Так нафига плодить избыточность? Ведь когда FK занимает места относительно столько же сколько и сами данные на которые он ссылается, то смысл в нем сводится к нулю. Или если бы система была ориентрована на анализ данных, то структура должна выглядеть по другому, но анализ - не в этой базе, и не с этой таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2005, 22:54 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Urri> А 4-х байтов, как я уже показал выше, не хватает. Надо 5. Хватает, в случае со справочником это как раз 4 байа + индекс на ПК + (если нужен анализ) индекс на основную таблицу. Все сочетания цифр в телефонных номерах не встречаются, номеров будет меньше чем 2**32. Было требование - уменьшить размер базы. Справочник этот вопрос решает. Кроме того это стандартный механизм БД, т.е. как-то работать будет, и это еще вопрос что нагрузит базу больше: связывание таблиц или обработка хитро закодированного номера телефона. iLLer> Т.к. Здесь нафиг ключ не нужен, если кроме телефона нет никаких свойств, сами данные и есть ключ, если нужно индекс построил - вот и ключ. iLLer> Так и в данном случае, справочник есть смысл вводить если есть дополнительные аттрибуты, а в данном применении никаких аттрибутов нет. А адрес клиента, ФИО и пр. уже к атрибутам не относится. А если нет атрибутов, то база строится только для анализа закономерностей, но автор вопроса утверждает, что анализа там нет. Значит должны быть атрибуты. iLLer> Ведь когда FK занимает места относительно столько же сколько и сами данные на которые он ссылается, то смысл в нем сводится к нулю. ФК занимает в 2.5 раза (на 6 байт) меньше места чем строка. Вроде сначали собирались экономить 3 байта, а тут 5. iLLer> Или если бы система была ориентрована на анализ данных, то структура должна выглядеть по другому, но анализ - не в этой базе, и не с этой таблицей. Анализ появится позже. Scott Tiger> Чэм Эрэван Я уже писал выше - если мне нужно зачем-то (пользовательский интерфейс, взаимодействие со внешними системами) получить номер телефона, мне нужно будет прочитать справочник. Т.е., на каждый возвращаемый номер телефона имеем по несколько логических чтений. При массовой загрузке (обработка первичных данных) всё просто ляжет, я буду работать только на вычисление PK по заданному номеру телефона. Если нет справочника - нет этих чтений. По-моему, достаточно просто объяснил. Используем свёртку - нагружаем процессор дополнительными вычислениями, не используем - не нагружаем, но перелопачиваем большее количество данных. А что за задача такая хитрая, если можно, пару слов об этом? Какие выходные отчеты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2005, 23:22 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
c127Хватает, в случае со справочником это как раз 4 байа Объясните как! Есть номерная емкость 10^10 (10 цифр по 10 в каждой), в пересчете в двоичную систему для кодирования стольких комбинаций необходимо минимум 34 бита(2^33=8,589,934,592<10,000,000,000<2^34=17,179,869,184). Пренебрегать емкостью(мол, всех комбинаций цифр никогда не будет) разработчик не имеет права. А если вдруг будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2005, 00:12 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> А вы не пробовали делать справочник цен например(Код цены, Цена)? А из > товаров, условно говоря, делать ссылку на справочник цен по коду цены. Очень > здорово получается. Только это нафиг не нужно никому. Безграмотное решение. Цены регистрируются посредством третьей таблицы примерно так (на самом деле, совсем не так, но для наглядности подойдет): код поставщика, код товара, цена, валюта, дата регистрации цены, системные маркеры, код условий поставки, код условий оплаты. Ничего общего с обсуждаемым вопросом нет. Т. е. абсолютно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2005, 07:21 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
2 c127 - в крайности вдаваться тоже не надо. Уменьшение объёма хранимой информации - не основная цель. Основная цель - повышение производительности, и уменьшение объёма информации здесь - только один из методов, имеющий как плюсы, так и минусы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2005, 09:53 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Правильно, безграмотное решение. Так и в этом случае, тоже самое. Поскольку ФК будет явно больше по объему 4 байт(если есть сомнения читай выше), то можно номер и принять за ПК и ФК: Номера(номер binary(5),...) Звонки(номер источник binary(5), номер получатель binary(5), ...) Делаем два ФК на "Номера". Вот и все. Ну необычно выглядит номер, ну и что? Никто не заставляет нас хранить данные также как мы их видим. Отображение - это задача приложения, а не БД и не СУБД. А хранить данные в разреженном состоянии совершенно нет необходимости. Объясните зачем делать лишнее соответствие типа Номера(код номера bigint, номер char(10),...) Звонки(код номера источника bigint, код номера получателя bigint, ...) ??????? Ведь это тоже самое что и справочник цен!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2005, 13:27 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> Ведь это тоже самое что и справочник цен!!!! Принципиальная разница. Вы ее действительно не видите? > Объясните зачем делать лишнее соответствие типа > Номера(код номера bigint, номер char(10),...) 1. Никто нигде никогда никому не обещал, что номер обязан быть десятизначным. Не факт, что завтра не начнут выделяться двадцатизначные номера или - например - вместо числовой последовательности будет использоваться IP. 2. Не факт, что не понадобится дополнительная информация об абоненте или номере. Даже скорее всего понадобится. Где и как ее прикажете хранить? > код номера получателя bigint А зачем восемь байт? Какое количество номерной емкости Вы собираетесь регистрировать? Хинт: у национальных операторов количество абонентов - единицы десятков миллионов. > Ну необычно выглядит номер, ну и что? Да наплевать, как он выглядит. Неважно это. Важно отсутствие преобразований. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2005, 14:32 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
Вообще говоря, здесь подразумевается, что все системы оперируют номером телефона как PK, в том числе и CRM. Я же писал выше... Что касается цены: разумеется (мной), что хранение сущности под названием "цена" в справочнике - это однозначный бред, если под ценой подразумевается сумма наличности/безналичности, которую необходимо заплатить за единицу товара. Если понимать под термином "цена" набор свойств, характеризующих продажные качества товара - тогда да, всё верно. Обычно для увеличения производительности подобных систем делается снапшот (materialized view), в котором "собирается" в денормализованном виде нужная информация - потребительские качества товара + его текущие продажные качества. Хотя возможны варианты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2005, 14:45 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
guest_20040621Принципиальная разница. Вы ее действительно не видите? Вижу принципиальное совпадение. Вы сказали, что цену надо иметь в третей таблице. Так вот в рассматриваемом варианте таблица звонков и есть "третья". И делать оттуда ссылку на данные, когда размер данных равен размеру ссылки - бред. В этом случае данные и ссылка должны совпасть. guest_20040621 1. Никто нигде никогда никому не обещал, что номер обязан быть десятизначным. Не факт, что завтра не начнут выделяться двадцатизначные номера или - например - вместо числовой последовательности будет использоваться IP. Это, как я понял, дано по условию задачи и должно быть прописано в ТЗ. Сколько и каких номеров может обслуживать система. Проблема перевода системы с одного диапазона на другой проблема другого уровня. guest_20040621 2. Не факт, что не понадобится дополнительная информация об абоненте или номере. Даже скорее всего понадобится. Где и как ее прикажете хранить? Необходима информация - сделайте справочник. Только в качестве ПК в этом справочнике выберете сам номер. guest_20040621 А зачем восемь байт? Какое количество номерной емкости Вы собираетесь регистрировать? Хинт: у национальных операторов количество абонентов - единицы десятков миллионов. Сколько в ТЗ написано - столько и должно быть. Написано, что пренебрегаем тем-то и тем-то, то тогда можно и инт заложить. Но опять-таки, никто не мешает сворачивать стринговый номер в инт, и использовать его и в качестве ПК и в качестве ФК. А запаковать и выпаковать 9 цифр в инт вообще не проблема. guest_20040621 Да наплевать, как он выглядит. Неважно это. Важно отсутствие преобразований. А вот тут поспорить можно. Что понимается под преобразованиями? К примеру, Вы пишете в базу строку "Альфа", Вы думаете СУБД так и запишет на диск? Нет, пока информация дойдет до физического хранения она перетерпит кучу преобразований, начиная от кодовой страницы(высокоуровневое преобразование) и заканчивая методами записи на магнитный носитель (к примеру манчестерский код и т.п.). Т.е. все эти преобразования идут на лету, Вы их не видите, но это не значит что их нет. Если качественно написать функцию обратимого преобразования, то и не надо заставлять СУБД хранить строковые данные там, где они не должны быть. От избыточности(разреженности данных) надо избавлятся. Другое дело если СУБД поддерживает упаковку данных на лету, и хранит все запаковано. То тогда физически все будет выглядеть именно так, как я и написал. СУБД запакует эти строковые данные именно в минимально необходимый объем а при запросах будет запаковывать/распаковывать. С одной стороны Вы будете видеть стринги, а на диске это будет занимать места меньше. Но метод при котором Вы сами закладываете упаковку предметного понятия в тип данных, гораздо лучше, чем встроенное сжатие БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2005, 15:17 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
> И делать оттуда ссылку на данные, когда размер данных равен размеру ссылки - > бред. Хотите ходить по граблям - ходите. Мне это дискомфорта не создает. > Это, как я понял, дано по условию задачи и должно быть прописано в ТЗ. Ага. Непонятно, правда, откуда у техписателя должна появиться такая информация. Телепатические способности, видимо. > Сколько и каких номеров может обслуживать система. Проблема перевода > системы с одного диапазона на другой проблема другого уровня. Это в данном случае не проблема перевода, а банальная ошибка проектирования. > Необходима информация - сделайте справочник. Только в качестве ПК в этом > справочнике выберете сам номер. Ключевым может быть _независимое_ поле. Понимаете? Номер независимой сущностью не является. > А запаковать и выпаковать 9 цифр в инт вообще не проблема. Правильно, давайте ненужной херней грузить процессор. Это такой особый вид извращения - сделать через... в общем, понятно, как, потом эти своими руками созданные проблемы преодолеть? Может, проще не создавать проблем? > Что понимается под преобразованиями? В данном случае - любая функциональная зависимость между данными, требующая вычислений. > Т.е. все эти преобразования идут на лету, Вы их не видите, Этими преобразованиями занимается СУБД. И к проектированию структур данных формат хранения данных на жестком диске имеет очень сильно опосредованное отношение. > От избыточности(разреженности данных) надо избавлятся. Что, собственно, я и предлагаю. > Но метод при котором Вы сами закладываете упаковку предметного понятия в > тип данных, гораздо лучше, чем встроенное сжатие БД. А зачем мне вообще что-то упаковывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2005, 17:03 |
|
||
|
Как лучше хранить номер телефона?
|
|||
|---|---|---|---|
|
#18+
2 iLLer >Объясните как!... Пренебрегать емкостью(мол, всех комбинаций цифр никогда не будет) разработчик не имеет права. Точно так же как в 2**32 вмещаются все существующие фамилии, которые примерно 32**10=2**50. Но Вас это не смущает. Тут переномеровываются все существующие номера, остальное заполняется по мере надобности. Все равно 4млрд номеров в системе не будет. 2 Scott Tiger >2 c127 - в крайности вдаваться тоже не надо. Уменьшение объёма хранимой информации - не основная цель. Основная цель - повышение производительности, и уменьшение объёма информации здесь - только один из методов, имеющий как плюсы, так и минусы. Согласен. Так какие отчеты будут требоваться? Может там в большинстве случаев можно обойтись сканированием длинной таблицы без связывания, например посчитать наговоренное за последний месяц время. Размер не единственный плюс словаря. Еще это стандартное решение. Упаковка номера решение нестандартное в смысле БД, если по нему вдруг нужно будет искать то будут проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 05:31 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32900507&tid=1541333]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
137ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 443ms |

| 0 / 0 |
