|
|
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
Alexander RyndinScareCrowсортированы они по какому полю?По первичному ключу. и что мешает взять вдвое/втрое больше записей, чем нужно для показа, фильтрованных по паре/тройке наиболее селективных условий, а потом приджойнить к ним нужное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2011, 12:21 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
ScareCrowAlexander Ryndinпропущено... По первичному ключу. и что мешает взять вдвое/втрое больше записей, чем нужно для показа, фильтрованных по паре/тройке наиболее селективных условий, а потом приджойнить к ним нужное? Дело в том, что все джойны, которые здесь обсуждались, как раз-таки и нужны для того, чтобы определить записи, которые можно показать. Т.е. джойны делаются по тем условиям, которые имеют значения для отбора. И всё это обсуждалось для формата хранения данных EAV. Вы, как я понял, когда говорите "приджойнить к ним нужное" - имеете в виду приджойнить имя пользователя и т.п. Но это и не обсуждается, естественно, это делается когда уже ясно - какие пользователи подходят а какие нет. То есть ваш вопрос похоже вызван тем что вы как-то иначе себе представляете исходное условие задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2011, 12:35 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
web_foxПокажите, пожалуйста, лучший по времени EXPLAIN ANALYZE каждого из трёх вариантов запроса (только на одинаковых данных c одинаковым поиском) с сортировкой, которую хотели, и т.п.: 1. Через отдельные колонки (там, где bitmap-скан будет). 2. Через intarray. 3. Через bit string. О кей, на днях постараюсь это сделать. Пока что урывками (т.к. увы очень мало свободного времени) тестирую более тщательно и в том виде, как это будет выглядеть на практике, вариант с фуллсканом. На данный момент могу сказать, что миллион записей в данном случае - это пожалуй крайний предел. Уже на полутора миллионах думает около минуты. Так что если число пользователей подойдет к миллиону (эх, чем черт не шутит), придется думать снова :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2011, 13:10 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
А почему-бы вам не обратить внимание на СУБД которые хранят данные по колонкам? На Sybase IQ например? По идее - она идеально ложится на вашу задачу: складываете все в одну большую таблицу, индексируеете все поля и вперед - делайте запросы как вашей душе угодно. При этом у вас еще будет следующее: За счет хранения данных по колонкам, IQ довольно просто позволяет добавлять/удалять колонки и индексировать их отдельно. За счет того, что у вас статистическая информация с довольно небольшим набором значений для каждой колонки - в вашем случае коэффициент сжатия данных будет ооочень большим - база со всеми индексами будет занимать реально немного места (гораздо меньше чем ваши исходные данные). Большинство ваших полей скорее всего нужно будет проиндексировать bitmap/bitwise индексами, скорее всего понадобятся еще индексы других типов (в IQ их много и разных) - но это уже нужно смотреть по конкретным данным. Поскольку принцип индексирование в IQ зависит не от запросов, а от данных, которые в ней лежат, - вы действительно сможете делать запросы, какие вашей душе угодно. (кстати IQ очень элегантно обрабатывает конструкцию NOT IN, - это одна из ее сильных сторон) Сразу скажу, - удовольствие это конечно не дешевое, - но за счет того, что архитектура IQ сильно отличается от архитектуры стандартной СУБД, - она будет требовать существенно меньше аппаратных ресурсов и дискового пространства, - так что возможно на этом удастся сэкономить. Подумайте в эту сторону. Подробнее можно посмотреть здесь , а вот здесь - отчет который дает неплохое представление о сути продукта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:35 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
IQ стоит 30-40к$ по западному прайсу. В СНГ, где сайбейз тщательно скрывает цены от клиентов думаю ценник потянет на 50-60k$ за процессор. В итоге сервак на 4 проца станет не реальным по цене. И да, IQ вы нигде не найдете и не достанете просто так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:41 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
nartova@sybase.ruстандартной СУБДХочу до десяти раз ...! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 17:45 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
А я собственно и не скрывала что это не дешево, но только кто вам сказал что проца понадобится 4 а не, скажем 1 ну или максимум 2? Мы похожие базы на ноутбуке средней паршивости гоняли - и ничего, прекрасно все отрабатывает. А вот здесь справа есть кнопка на скачивания 30-дневного триала IQ 15.2, заполнили форму с данными и качайте себе - триалы под разные платформы есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 18:21 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
AnyaNartovaА почему-бы вам не обратить внимание на СУБД которые хранят данные по колонкам? На Sybase IQ например? Спасибо! Вполне возможно, что в будущем воспользуюсь для для этой или других задач. Ну а пока что вполне приемлемым оказалось решение на PostgreSQL - для каждого атрибута своя колонка (а не все поля в битовой строке, как я пытался в предыдущем варианте), ну и не забывать про экономию места, чтобы больше данных влезло на страницу - например использовать тип "char" вместо smallint, поля по возможности null-able, и частичные индексы (учитывающие только не null значения) . Поскольку у меня данные состоят по большей части из флагов, получается довольно компактно, т.к. в случае если флаг не установлен, то он и места не занимает (ибо null). То же самое с целочисленными данными. То есть хотя возможных атрибутов и довольно много, всё-же (учитывая статистику именно моих данных) более компактно получается с отдельными полями, чем с битовыми строками (особенно если учесть, что они хранятся в Postgre с приличным оверхедом). Ну и частичные индексы тоже занимают намного меньше места и следовательно работают быстрее. В общем, на десяти миллионах это всё работает вполне шустро, и сложность запроса особой роли не играет. Единственно, понадобились некоторые ухищрения для того, чтобы индексы реально использовались планировщиком в ситуации, когда нужно вернуть результаты в отсортированном по id виде (то есть с указанием order by id desc). Индексы, во-первых, должны быть составными, такого типа: Код: plaintext 1. Код: plaintext Вполне возможно, адепты PostgreSQL найдут здесь какие-нить вопиющие косяки, но я в ней нуб, что поделать, во всяком случае пляска с бубном дала вполне приемлемый результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 23:46 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
On 09.02.2011 23:46, Васисуалий Пупкинсон wrote: > Спасибо! Вполне возможно, что в будущем воспользуюсь для для этой или других задач. Тут надо чётко разграничить направление БД. Если у тебя OLTP, то IQ не подходит ни в каком виде. Если MIXED, тоже. IQ только для OLAP. Это типа на будущее для понимания. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 12:16 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=37066579&tid=1552724]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 140ms |

| 0 / 0 |
