LINUX.ORG.RU

Много мелких записей - как и в чем хранить?

 ,


1

1

Смотрите какая штука. Есть некие документы, состоящие из фиксированного числа полей, но переменного числа строк (обычно до 10 тысяч). Документы эти парсятся и добавляются в БД в режиме реального времени - то есть, это надо делать быстро. Из базы почти всегда достаются части одного документа, по сотне записей, например.

В чем и как мне это хозяйство хранить? Может есть какой-то более подходящий вариант, чем Монга и тупое разбиение документов на отдельные записи? Может какие-то ноу-хау придумали, а я в танке и все пропустила?

А если зайти с другой стороны: какие при текущей схеме хранения существуют проблемы, которые надо решить?

Zenom ★★★
()
Ответ на: комментарий от Zenom

Как-то муторно и не очень быстро получается. Нужно вытаскивать эти куски по отдельному индексу. Я думала, может какие-то интересные идеи есть на этот счет. Например, хранить весь документ целиком как одну запись, а отдельные его строки - как встроенный документ.

Dirty_Diana
() автор топика

Берете помечаете документ индексом по отдельному полю и применяете по нему партиционирование https://habrahabr.ru/post/66151/

Это должно улучшить скорость ибо 10000 строк будут сохраняться в отдельном файле

ism ★★★
()
Ответ на: комментарий от ism

Спасибо, но с SQL я связываться не буду. Не для этой задачи.

Dirty_Diana
() автор топика

Есть некие документы, состоящие из фиксированного числа полей, но переменного числа строк

для всех документов число и набор полей одинаковые?

запросы идут - просто последовательная выборка по «номеру строки»? ACID требуется? Сколько всего документов? Надо ли их удалаять, и как долго хранить?

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Да, последовательно. ACID - опционально, может и так прожить. Документов дофига - миллионы. Хранятся постоянно, хотя удалять тоже бывает нужно, но редко.

Dirty_Diana
() автор топика
Ответ на: комментарий от Dirty_Diana

для всех документов число и набор полей одинаковые?

Вот это не отвечено.

В общем случае, если действительно нужен только последовательный доступ, не нужен никакой индекс, и оне не модифицируются (я про UPDATE) почемуб не хранить в виде файла на документ?

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Набор полей одинаковый. Не хочу городить свой огород, потому что позже обязательно появится какое-то новое требование, и что я потом с этими файлами делать буду?

Короче, монга - так монга.

Dirty_Diana
() автор топика
Ответ на: комментарий от Dirty_Diana

если одинаковый, то реляционная база данных - наиболее пригодный вариант, только аккуратнее со всякими мускулями

Deleted
()
Ответ на: комментарий от Dirty_Diana

Например, хранить весь документ целиком как одну запись, а отдельные его строки - как встроенный документ.

Только имей в виду, что поддокументы - это виртуальная штука и инструменты для работы с ними очень куцые. К тому же сомневаюсь, что монга внутри умеет читать документ частично.

Vit ★★★★★
()

Тогда ваша база с кешированием redis

ism ★★★
()

PostgreSQL уже советовали?

AnDoR ★★★★★
()

Есть еще cassandra. Ее фишка в очень быстром чтении куска данных (data range), при условии что запрос хорошо ложится на ту модель, как хранятся данные в самой cassandra. Но штука капризная со своими особенностями. Нужно изучить и понять, как cassandra хранит данные.

dave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.