|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
посоветуйте базу, нечто похожее на кубы, но проще есть кортеж состоящий из ключей и одного показателя, в каждом показателе произвольное количество ключей ключей в кортеже от 1 до 50 кортежей много - 100М и более до 10B необходимо быстро добавлять в хранилище значения не менее 10к наборов в сек желательно удалять и изменять наборы, но можно использовать только добавление дельт нужна быстрая выборка наборов с фильтрами по ключам доступность на win-платформе и нужна устойчивость к сбоям многопользовательский доступ и транзакции - очень желательны, распределенность - не обязательна плохо ориентируюсь в nosql решениях ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2015, 11:01 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
Можно конечно Vertica Community попробовать, даже однонодовая не распределенная инсталляция должна за счет архитектуры хранения данных быстро эту задачу решать по вставке и поиску данных, если правильно encoding и сортировку на таблицу наложить. Но там ограничение до 1 тб исходных данных, нужно считать, влезут Ваши данные в этот объем или нет. Ну и платформа Linux, хотя мне кажется это не такой уж критический момент, чтобы сервер обязательно на Windows был. Трех нодовая инсталляция так вообще летать будет, но IMHO и однонодовая должна уложиться в требуемые рамки при правильном проектировании. Если тысячи коннектов не будут, то и памяти не сильно много понадобится, здесь диски быстрые нужны только будут точно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2015, 12:57 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
товарищъпосоветуйте базу, нечто похожее на кубы, но проще есть кортеж состоящий из ключей и одного показателя, в каждом показателе произвольное количество ключей ключей в кортеже от 1 до 50 кортежей много - 100М и более до 10B необходимо быстро добавлять в хранилище значения не менее 10к наборов в сек желательно удалять и изменять наборы, но можно использовать только добавление дельт нужна быстрая выборка наборов с фильтрами по ключам доступность на win-платформе и нужна устойчивость к сбоям многопользовательский доступ и транзакции - очень желательны, распределенность - не обязательна плохо ориентируюсь в nosql решенияхПример данных показать можете? Что значит "кортеж, состоящий из ключей и одного показателя"? Ключ составной? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2015, 13:52 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
Alexander RyndinПример данных показать можете? Что значит "кортеж, состоящий из ключей и одного показателя"? Ключ составной? структура следующая: показатель; схема; ключ1; ключ2.... схема определяет типы ключей из конкретного набора (в одной схеме структура ключей одинакова для всех наборов), ключи в наборе могут повторяться, ключи представляют собой GUID-ы и глобально-уникальны пример: показательсхемаключ1; ключ2....100.01211;2;3;3;4101.01211;2;3;3;5102.01222;8103.01238;5;5;5;5;5;5103.01238;;;;;5;10 необходимо получать по фильтру "выдать все строки где схема=123 и ключ1=2 и ключ4=5" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2015, 11:49 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
Это любая релляционная база мне кажется быстрее сделает, чем NoSQL :) В РСУБД достаточно сделать 2 таблицы мастер-детайл и индексы, в NoSQL придется по схеме все ключи сканить, чтобы найти подходящие по условиям. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2015, 11:58 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
а если ключей 50 штук (это 50 колонок) и записей в таблице 10B ? какой индекс должен быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2015, 18:55 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
товарищъа если ключей 50 штук (это 50 колонок) и записей в таблице 10B ? какой индекс должен быть? В HP Vertica например, нет индексов. Там колонкоориентированное хранение. Вы сделаете таблицу с полями : показатель, схема, ключ1, ключ2, ... На таблицу сделаете сортировку по полям схема, показатель и на все поля нацепите EDCODING RLE. Далее когда будете искать по схеме+ключи, сразу по сортировке фильтром выцепяться все записи с нужной схемой, а по каждой колонке с учетом найденных записей пройдется скан с фильтрацией по ключу. Так как каждая колонка хранится отдельно, то не нужно будет для поиска читать все ключи на каждой записи, будут читаться в параллели только участвующие в запросе колонки. Если же база распределенная (на 3 и более серверов), то база данных будет хранится частями между серверами кластера и в момент запроса все сервера по своей части проведут поиск нужных данных, а потом найденное уже соберется на одном из серверов и результат уйдет клиентскому приложению. Таим образом как раз MPP и позволяют быстро пережевывать большие объемы данных, разбивая их на части между серверами. Других собственно говоря вариантов то особо и нету, никакой индекс Вам не поможет решить такую задачу на больших объемах. Те же NoSQL, как MongoDB или Cassandra примерно тоже самое и сделают, только данные по другому будут хранить и обрабатывать. На РСУБД же это решается с помощью создания 2 таблиц. В одной поля синт ид, показатель и схема, в другой по ид поле ключ. То есть хранится один ко многим, ищется сложнее, чем на Верткике, но принцип похожий получается, хранить каждый ключ отдельно от остальных, чтобы не сканировать при поиске все поля ключей. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2015, 14:31 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
товарищънеобходимо быстро добавлять в хранилище значения не менее 10к наборов в сек Такую скорость вставки при 50-и индексах и таком объеме (10В) - здесь нужно специализированное решение, имхо. Берем 53 сервера. 1-й заливает данные на 51 сервер, разбивает порцию 10к на 51 таблицу, сортирует и раздает серверам: - на 2-й сервер таблицу (id, показатель; схема; ключ1; ключ2; ...), или (id, показатель), т.е. без ключей; - на 50 серверов таблицы вида (схема, ключ-i, id), т.е. каждый индекс на отдельный сервер; а 53-й сервер будет выполнять поиск: раздавать соответствующим серверам критерии поиска, принимать результаты, брать пересечение id, и запрашиват значение показателя к этим id. Код: sql 1.
при таком количестве записей как-то не вдохновляет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2015, 18:16 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
DirksDRтоварищънеобходимо быстро добавлять в хранилище значения не менее 10к наборов в сек Такую скорость вставки при 50-и индексах и таком объеме (10В) - здесь нужно специализированное решение, имхо. Берем 53 сервера. 1-й заливает данные на 51 сервер, разбивает порцию 10к на 51 таблицу, сортирует и раздает серверам: - на 2-й сервер таблицу (id, показатель; схема; ключ1; ключ2; ...), или (id, показатель), т.е. без ключей; - на 50 серверов таблицы вида (схема, ключ-i, id), т.е. каждый индекс на отдельный сервер; а 53-й сервер будет выполнять поиск: раздавать соответствующим серверам критерии поиска, принимать результаты, брать пересечение id, и запрашиват значение показателя к этим id. Код: sql 1.
при таком количестве записей как-то не вдохновляет. Вы меня пугаете, какие еще 50 серверов всего на 10 миллиардов записей :) 3 нодовая Вертика спокойно прожует еще больший объем и выдаст результат за минуты, а не часы/сутки/года. Хранение значений в Вертике управляется, поэтому при грамотном ENCODING на диске вместо миллиардов значений записей на колонку можно хранить малые объемы данных за счет сортировки, сжатия, хранения дельты от минимального, преобразования значений в словарь и хранения позиции в словаре и т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2015, 22:06 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
ASCRUS, Это очень хорошо. Я немножко прикололся, с 50-ю серверами, чтобы разговор поддержать:) Надо будет почитать про Вертику. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2015, 16:29 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
DirksDRASCRUS, Это очень хорошо. Я немножко прикололся, с 50-ю серверами, чтобы разговор поддержать:) Надо будет почитать про Вертику. у вертики с добавлением в реал-тайме могут быть проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 16:32 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
товарищъструктура следующая: показатель; схема; ключ1; ключ2.... схема определяет типы ключей из конкретного набора (в одной схеме структура ключей одинакова для всех наборов), ключи в наборе могут повторяться, ключи представляют собой GUID-ы и глобально-уникальны необходимо получать по фильтру "выдать все строки где схема=123 и ключ1=2 и ключ4=5"Подойдёт СУБД Caché: ссылки раз и два . В Вашем случае в таблице хватит и трёх обычных полей: Примерно так:Класс demo.test (она же таблица)Class demo.test Extends %Persistent { Index idxSchema On схема [ Type = bitmap ]; Index idxKeys On (ключи(KEYS), ключи(ELEMENTS)); Property показатель As %Double(MINVAL = 0, SCALE = 1) [ Required ]; Property схема As %Integer(MINVAL = 0) [ Required ]; Property ключи As %String(MAXLEN = 3641144) [ Required ]; ClassMethod ключиBuildValueArray( value, ByRef array) As %Status [ Internal, ServerOnly = 1 ] { if value="" { set array(0)=value }else{ set list=$listfromstring(value,";"),ptr=0,i=1 while $listnext(list,ptr,item){ set array(i)=item,i=i+1 } } quit $$$OK } /// Генерация тестовых данных. /// <br/> Вызов: <example>do ##class(demo.test).Fill()</example> ClassMethod Fill() { &sql(truncate table demo.test) ; удаление предыдущих данных &sql(insert into demo.test(показатель,схема,ключи) select 100.0,121,'1;2;3;3;4' union all select 101.1,121,'1;2;3;3;5' union all select 102.2,122,'2;8' union all select 103.3,123,'8;5;5;5;5;5;5' union all select 103.3,123,'8;;;;;5;10' ) do $system.SQL.TuneTable($classname(),1) ; настройка таблицы (сбор статистики) do $system.OBJ.Compile($classname(),"cu") ; перекомпиляция класса (необязательно) } } select * from demo.testIDпоказательсхемаключи1100.01211;2;3;3;42101.11211;2;3;3;53102.21222;84103.31238;5;5;5;5;5;55103.31238;;;;;5;10
Index idxKeys On (схема, ключи(KEYS), ключи(ELEMENTS)); , но это уже на Ваше усмотрение. товарищънеобходимо быстро добавлять в хранилище значения не менее 10к наборов в сек желательно удалять и изменять наборы, но можно использовать только добавление дельт нужна быстрая выборка наборов с фильтрами по ключам доступность на win-платформе и нужна устойчивость к сбоям многопользовательский доступ и транзакции - очень желательны, распределенность - не обязательнаПочитайте про проект GAIA , и особенно gaia.pdf , в котором больше тех.деталей. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2015, 09:46 |
|
база данных для поиска кортежей
|
|||
---|---|---|---|
#18+
Ivan DurakDirksDRASCRUS, Это очень хорошо. Я немножко прикололся, с 50-ю серверами, чтобы разговор поддержать:) Надо будет почитать про Вертику. у вертики с добавлением в реал-тайме могут быть проблемы. Веду не один проект, где в реалтайме заливаются десятки и даже сотни гигабайт за час. Не припомню что то проблем за 3 года. Поделитесь? ) P. S. В фейсбуке вроде слышал в Вертику льют пару тб в час, но уже архитектуру кластера усложнили там, поставив на него сервера, которые занимаются только загрузкой. Ну а вообще у автора всего то десяток лярдов. Вообще ни о чем. Вопрос только, влезет ли в бесплатный 1 терабайт. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2015, 14:02 |
|
|
start [/forum/topic.php?fid=48&msg=38935089&tid=1856841]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 141ms |
0 / 0 |