|
|
|
jsonb или дополнительная таблица?
|
|||
|---|---|---|---|
|
#18+
Всем привет, при проектировании архитектуры назрел такой вопрос: - Есть список абонентов, у каждого из которых есть телефоны (их может быть несколько, но логично предположить, что не очень много — 2-4 максимум (2 мобильных, 1 домашний, 1-2 рабочих и т.д.) Как это хранить? Что будет быстрее, удобнее и оптимальнее? 1. В связанной таблице phone id number type person_id 2. В jsonb-поле в основной таблице person: id name phones Потребуется поиск по номеру или фрагменту номера. Абонентов может быть и несколько миллионов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2015, 01:45 |
|
||
|
jsonb или дополнительная таблица?
|
|||
|---|---|---|---|
|
#18+
goodwВсем привет, при проектировании архитектуры назрел такой вопрос: - Есть список абонентов, у каждого из которых есть телефоны (их может быть несколько, но логично предположить, что не очень много — 2-4 максимум (2 мобильных, 1 домашний, 1-2 рабочих и т.д.) Как это хранить? Что будет быстрее, удобнее и оптимальнее? 1. В связанной таблице phone id number type person_id 2. В jsonb-поле в основной таблице person: id name phones Потребуется поиск по номеру или фрагменту номера. Абонентов может быть и несколько миллионов. IMHO лучше хранить в связанных таблицах. План запроса будет понятнее, да и индексирование настроить можно более гибко. JSONB это скорее, для "большой помойки", когда структура может меняться каждую неделю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2015, 08:00 |
|
||
|
jsonb или дополнительная таблица?
|
|||
|---|---|---|---|
|
#18+
goodwВсем привет, при проектировании архитектуры назрел такой вопрос: - Есть список абонентов, у каждого из которых есть телефоны (их может быть несколько, но логично предположить, что не очень много — 2-4 максимум (2 мобильных, 1 домашний, 1-2 рабочих и т.д.) Как это хранить? Что будет быстрее, удобнее и оптимальнее? 1. В связанной таблице phone id number type person_id 2. В jsonb-поле в основной таблице person: id name phones Потребуется поиск по номеру или фрагменту номера. Абонентов может быть и несколько миллионов. а зачем сразу овноджейсон,б, есть же ещё array-и, например. но array-и ,например, были бы уместны для поиска , если он [поиск] А. по всему "значению" [элементу] (проверка на && ,&> и т.п.), и Б. велико перекрытие (а не так, что 1 тлфн -- только у одного в среднем, у 2-х -- уже либо ошибка, либо общий служебный/домашний, но в следовых количествах), и поиск ведётся по нескольким признакам -- имя + признак из array-я + .... т.ч. в вашем случае предыдущий оратор безусловно прав. делайте подчиненную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2015, 10:47 |
|
||
|
jsonb или дополнительная таблица?
|
|||
|---|---|---|---|
|
#18+
Спасибо. Еще в этой ситуации мне надо хранить разрозненное количество данных для каждого абонента. Например, для одного одни поля, для другого другие. Рассматриваю тут несколько вариантов: 1. Обозвать в специальной таблице колонки основными типами данных и класть в соответствующую колонку значение. value id varchar text int decimal field_id field id name person_id 2. Опять же хранить в jsonb-поле основной таблицы person id name data 3. Хранить в формате ключ-значение в подчиненной таблице: id key value person_id Как будет лучше? Абонентов миллион, произвольных полей 3-10 на каждого абонента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2015, 12:34 |
|
||
|
jsonb или дополнительная таблица?
|
|||
|---|---|---|---|
|
#18+
goodw, и почему все мордописцы дрочат на овноджейсона,б ? для плоской коллекции ключ--значение существует hstore. т.е. именно коллекция "ключ--значение" [%] правда -- как extension. но у него куча плюсов искаропки -- типа конкатенации, дилета и т.п. сахарочка да и при популяции в рекорд, при наличии в исходной (упакованной) записи полей--массивов он не блажит, как грёбаный жейсон а индексирование у них, кажецца, одинаково где--то как--то функциональное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2015, 12:48 |
|
||
|
jsonb или дополнительная таблица?
|
|||
|---|---|---|---|
|
#18+
goodw, ps что касаемо обоснованности -- решать в каждом случае отдельно -- соображений много. кроме возможности составных индексов для сложного поиска И по вхождениям в коллекции (массивы, хештаблицы, json-ы) -- когда все условия в одной табличке и можно придумывать составной индекс -- есть соображения результирующей ширины записи основной таблицы, которая дублируется целиком в новую версию на каждый чих. Т.е. если поиск не поджимает, а апдейты частые -- лучше по возможности декомпозировать по максимуму на атомы (дубль атома дешевле дубля всего компаунда, в котором сменился единственный атом). Опять же индекс перестраивается [читай --необратимо пухнет] только в табличке атомов, но не все индексы -- в табличке компаундов. т.е. тут соображения балланса. Проще таки стартовать из по возможности полностью декомпозированого состояния. А уж по мере возникновения проблем с производительностью выборок -- пускаться в дорогие (для версионников) ухудшения [денормализации]. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2015, 13:00 |
|
||
|
jsonb или дополнительная таблица?
|
|||
|---|---|---|---|
|
#18+
qwwq, jsonb привлекает своей новизной, не так давно появился, попробовать интересно. Отсюда и вопросы. Это всего лишь технология, одна из. Не стоит на нее злиться :) Пока что я склоняюсь к такому варианту: - несколько разных таблиц на каждый из типов данных - джойнить их в зависимости от типа данных Либо одна большая таблица для всех, где каждая колонка отвечает за свой тип данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 01:50 |
|
||
|
|

start [/forum/search_topic.php?author=KLV&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
8ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
| others: | 656ms |
| total: | 820ms |

| 0 / 0 |
