powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / база данных для поиска кортежей
13 сообщений из 13, страница 1 из 1
база данных для поиска кортежей
    #38931577
Фотография товарищъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посоветуйте базу, нечто похожее на кубы, но проще

есть кортеж состоящий из ключей и одного показателя, в каждом показателе произвольное количество ключей
ключей в кортеже от 1 до 50
кортежей много - 100М и более до 10B
необходимо быстро добавлять в хранилище значения не менее 10к наборов в сек
желательно удалять и изменять наборы, но можно использовать только добавление дельт
нужна быстрая выборка наборов с фильтрами по ключам
доступность на win-платформе и нужна устойчивость к сбоям
многопользовательский доступ и транзакции - очень желательны, распределенность - не обязательна
плохо ориентируюсь в nosql решениях
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38931813
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно конечно Vertica Community попробовать, даже однонодовая не распределенная инсталляция должна за счет архитектуры хранения данных быстро эту задачу решать по вставке и поиску данных, если правильно encoding и сортировку на таблицу наложить. Но там ограничение до 1 тб исходных данных, нужно считать, влезут Ваши данные в этот объем или нет. Ну и платформа Linux, хотя мне кажется это не такой уж критический момент, чтобы сервер обязательно на Windows был. Трех нодовая инсталляция так вообще летать будет, но IMHO и однонодовая должна уложиться в требуемые рамки при правильном проектировании. Если тысячи коннектов не будут, то и памяти не сильно много понадобится, здесь диски быстрые нужны только будут точно.
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38931889
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
товарищъпосоветуйте базу, нечто похожее на кубы, но проще

есть кортеж состоящий из ключей и одного показателя, в каждом показателе произвольное количество ключей
ключей в кортеже от 1 до 50
кортежей много - 100М и более до 10B
необходимо быстро добавлять в хранилище значения не менее 10к наборов в сек
желательно удалять и изменять наборы, но можно использовать только добавление дельт
нужна быстрая выборка наборов с фильтрами по ключам
доступность на win-платформе и нужна устойчивость к сбоям
многопользовательский доступ и транзакции - очень желательны, распределенность - не обязательна
плохо ориентируюсь в nosql решенияхПример данных показать можете? Что значит "кортеж, состоящий из ключей и одного показателя"? Ключ составной?
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38932887
Фотография товарищъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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"
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38932900
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это любая релляционная база мне кажется быстрее сделает, чем NoSQL :) В РСУБД достаточно сделать 2 таблицы мастер-детайл и индексы, в NoSQL придется по схеме все ключи сканить, чтобы найти подходящие по условиям.
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38933382
Фотография товарищъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если ключей 50 штук (это 50 колонок) и записей в таблице 10B ? какой индекс должен быть?
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38934131
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
товарищъа если ключей 50 штук (это 50 колонок) и записей в таблице 10B ? какой индекс должен быть?
В HP Vertica например, нет индексов. Там колонкоориентированное хранение. Вы сделаете таблицу с полями :
показатель, схема, ключ1, ключ2, ...
На таблицу сделаете сортировку по полям схема, показатель и на все поля нацепите EDCODING RLE. Далее когда будете искать по схеме+ключи, сразу по сортировке фильтром выцепяться все записи с нужной схемой, а по каждой колонке с учетом найденных записей пройдется скан с фильтрацией по ключу. Так как каждая колонка хранится отдельно, то не нужно будет для поиска читать все ключи на каждой записи, будут читаться в параллели только участвующие в запросе колонки. Если же база распределенная (на 3 и более серверов), то база данных будет хранится частями между серверами кластера и в момент запроса все сервера по своей части проведут поиск нужных данных, а потом найденное уже соберется на одном из серверов и результат уйдет клиентскому приложению. Таим образом как раз MPP и позволяют быстро пережевывать большие объемы данных, разбивая их на части между серверами. Других собственно говоря вариантов то особо и нету, никакой индекс Вам не поможет решить такую задачу на больших объемах. Те же NoSQL, как MongoDB или Cassandra примерно тоже самое и сделают, только данные по другому будут хранить и обрабатывать.

На РСУБД же это решается с помощью создания 2 таблиц. В одной поля синт ид, показатель и схема, в другой по ид поле ключ. То есть хранится один ко многим, ищется сложнее, чем на Верткике, но принцип похожий получается, хранить каждый ключ отдельно от остальных, чтобы не сканировать при поиске все поля ключей.
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38934258
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
товарищънеобходимо быстро добавлять в хранилище значения не менее 10к наборов в сек
Такую скорость вставки при 50-и индексах и таком объеме (10В) - здесь нужно специализированное решение, имхо.
Берем 53 сервера.
1-й заливает данные на 51 сервер, разбивает порцию 10к на 51 таблицу, сортирует и раздает серверам:
- на 2-й сервер таблицу (id, показатель; схема; ключ1; ключ2; ...), или (id, показатель), т.е. без ключей;
- на 50 серверов таблицы вида (схема, ключ-i, id), т.е. каждый индекс на отдельный сервер;
а 53-й сервер будет выполнять поиск: раздавать соответствующим серверам критерии поиска, принимать результаты, брать пересечение id, и запрашиват значение показателя к этим id.
Код: sql
1.
по каждой колонке с учетом найденных записей пройдется скан с фильтрацией по ключу(Vertica) 


при таком количестве записей как-то не вдохновляет.
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38934344
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRтоварищънеобходимо быстро добавлять в хранилище значения не менее 10к наборов в сек
Такую скорость вставки при 50-и индексах и таком объеме (10В) - здесь нужно специализированное решение, имхо.
Берем 53 сервера.
1-й заливает данные на 51 сервер, разбивает порцию 10к на 51 таблицу, сортирует и раздает серверам:
- на 2-й сервер таблицу (id, показатель; схема; ключ1; ключ2; ...), или (id, показатель), т.е. без ключей;
- на 50 серверов таблицы вида (схема, ключ-i, id), т.е. каждый индекс на отдельный сервер;
а 53-й сервер будет выполнять поиск: раздавать соответствующим серверам критерии поиска, принимать результаты, брать пересечение id, и запрашиват значение показателя к этим id.
Код: sql
1.
по каждой колонке с учетом найденных записей пройдется скан с фильтрацией по ключу(Vertica) 


при таком количестве записей как-то не вдохновляет.
Вы меня пугаете, какие еще 50 серверов всего на 10 миллиардов записей :) 3 нодовая Вертика спокойно прожует еще больший объем и выдаст результат за минуты, а не часы/сутки/года. Хранение значений в Вертике управляется, поэтому при грамотном ENCODING на диске вместо миллиардов значений записей на колонку можно хранить малые объемы данных за счет сортировки, сжатия, хранения дельты от минимального, преобразования значений в словарь и хранения позиции в словаре и т.д. и т.п.
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38935089
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS,

Это очень хорошо.
Я немножко прикололся, с 50-ю серверами, чтобы разговор поддержать:)
Надо будет почитать про Вертику.
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38936192
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRASCRUS,

Это очень хорошо.
Я немножко прикололся, с 50-ю серверами, чтобы разговор поддержать:)
Надо будет почитать про Вертику.
у вертики с добавлением в реал-тайме могут быть проблемы.
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38936783
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
товарищъструктура следующая:
показатель; схема; ключ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
  • Выдать все строки где схема=121 и ключ1=1 и ключ5=4:select * from demo.test where
  • схема=121
  • and for some %element(ключи) (%key=1 and %value = '1')
  • and for some %element(ключи) (%key=5 and %value = '4')IDпоказательсхемаключи1100.01211;2;3;3;4
  • Выдать все строки где схема=121 и ключ1=1 и ключ5=5:select * from demo.test where
  • схема=121
  • and for some %element(ключи) (%key=1 and %value = '1')
  • and for some %element(ключи) (%key=5 and %value = '5')IDпоказательсхемаключи2101.11211;2;3;3;5
  • Выдать все строки где схема=123 и ключ1=8 и ключ3=пусто:select * from demo.test where
  • схема=123
  • and for some %element(ключи) (%key=1 and %value = '8')
  • and for some %element(ключи) (%key=3 and %value = null)IDпоказательсхемаключи5103.31238;;;;;5;10
Можно обойтись и одним индексом:
Index idxKeys On (схема, ключи(KEYS), ключи(ELEMENTS));
, но это уже на Ваше усмотрение.
товарищънеобходимо быстро добавлять в хранилище значения не менее 10к наборов в сек
желательно удалять и изменять наборы, но можно использовать только добавление дельт
нужна быстрая выборка наборов с фильтрами по ключам
доступность на win-платформе и нужна устойчивость к сбоям
многопользовательский доступ и транзакции - очень желательны, распределенность - не обязательнаПочитайте про проект GAIA , и особенно gaia.pdf , в котором больше тех.деталей.
...
Рейтинг: 0 / 0
база данных для поиска кортежей
    #38937158
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakDirksDRASCRUS,

Это очень хорошо.
Я немножко прикололся, с 50-ю серверами, чтобы разговор поддержать:)
Надо будет почитать про Вертику.
у вертики с добавлением в реал-тайме могут быть проблемы.
Веду не один проект, где в реалтайме заливаются десятки и даже сотни гигабайт за час. Не припомню что то проблем за 3 года. Поделитесь? )

P. S. В фейсбуке вроде слышал в Вертику льют пару тб в час, но уже архитектуру кластера усложнили там, поставив на него сервера, которые занимаются только загрузкой. Ну а вообще у автора всего то десяток лярдов. Вообще ни о чем. Вопрос только, влезет ли в бесплатный 1 терабайт.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / база данных для поиска кортежей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]