Какую БД можно использовать для хранения множества?
Путаюсь в формулировке самого множества, поэтому вопрос несколько расплывчатый. Прошу помощи в выборе СУБД под такую задачу. Работал исключительно MySQL, но в данном контексте реляционные БД не подходят.
Множество представлено "упорядоченными" записями, возможно хранимыми по аналогии вложенного множества, "псевдо" древовидная структура. Например:
1. Мы записали несколько записей последовательно. Сейчас они, как минимум, упорядочены по первичному ключу и дате добавления записи. Вся соль возникает на втором, третьем ... (N) раунде.
2. Необходимо добавить запись после любой ранее добавленной(например, но не последней). И так неограниченное количество раз.
В системе хранения возникает вопрос с принципом упорядочивания множества записей. На сегодня нашел как минимум два решения. Наиболее оптимальное, вложенное множество: добавить каждой записи информацию ID предыдущей и последующей записи. По множеству на втором этапе выборки можно построить последовательность:
- выбрать все записи множества[1 этап], циклом пройтись по полученным данным для сортировки (получения последовательности) и запросить из БД необходимые записи по ID(where `id` IN(..последовательность..)). Тогда при каждом добавлении новой записи необходимо делать полную выборку множества, а полученную последовательность кэшировать. При каждой вставке кэш полностью переписывается. Сложность сохранения растет линейно, выборка оптимальна.
- Либо делать количество запросов к БД кратное необходимомуколичеству записей. "Найди мне запись номер 1" - в принятых данных будет информация о следующей записи(например 55), делаем следующий запрос "Найди мне запись номер 55" и так далее по необходимому количеству. Сложность сохранения оптимальна, сложность выборки растет линейно количеству записей в выборке.
Решение крайне не оптимально, так как основано на СУБД реляционных, которые для хранения таких множеств не рассчитаны.
Подскажите пожалуйста, какую СУБД можно использовать для хранения и выборки последовательности таких записей?
Нужно мало, писать последовательно записи в контексте "добавить после любой ранее добавленной" с сохранением последовательности. В NoSQL слабо разбираюсь, от того необходима помощь.
ну вы же понимаете, что для такой формулировки нельзя избежать слова "индекс", в NoSQL индексов нет, там нельзя добавить "после" (ну, они есть, конечно, для нужд самой базы + можно построить по данным, но реляционные субд это сделают лучше), остаются реляционные
в neo4j "после" тоже добавить нельзя, но можно связать узел с добавляемым
может, вам не СУБД а просто структура данных нужна?
dimonchik2013: хранить нужно большое количество записей. Это веб сервис по типу блога, только хранит не посты/темы, а более атомарно - строки/записи/абзацы в рамках единственного "поста" каждого автора. Так как знаю PHP MySQL - реализовал на этом описанным способом. Убедился в том, что структура у меня не вяжется с "реляционностью". Индексы в рамках MySQL знаю досконально, пришел к выводу, что они тут неприменимы.