Доброй ночи! Ищу для скромного justforfun'овского проекта относительно быструю БД, в которой можно хранить и обрабатывать миллиарды записей. Пока что остановился на BerkeleyDB.
Записи представляют собой небольшую текстовою строку (~10-100 символов) в ASCII или Latin1 и несколько флагов/значений, которые и должны быть вторичными ключами. Каждая строка уникальна, если это имеет значение.
Что нужно:
- Быстрая выборка по основному и вторичному ключам (вторичных ключей может быть несколько), в том числе множество значений.
- Минимальный оверхед на хранения каждой записи.
- Очень желательна прозрачная компрессия, например, алгоритмом lzo, так как данные текстовые, и очень много почти однотипных (различие от одного до нескольких символов). Или это некошерно?
- Быстрый апдейт записей, в том числе значений вторичных ключей.
- Весьма желательная быстрая вставка порядка сотен тысяч записей (При подобных тестах производительность MySQL makes me cry).
- Очень желательно наличие блокировок
- Очень желательно наличие транзакций
Что не нужно/не обязательно:
- Сетевой доступ.
- Одновременный множественный доступ на запись/чтение.
- Разграничение прав.
- Отдельный сервер (в смысле демон) БД. Меня устроит и встраиваемая.
Что не устраивает в BerkeleyDB:
- Так как для каждого вторичного ключа нужна «secondary database», то мне кажется, там будет нехилый оверхед на каждую запись. В других БД дела обстоят ещё хуже?
- Ужасающие тормоза вторичных бд в Berkeley DB - и это при том, что речь идёт всего лишь о миллионах записей. Лично сам пока не тестил.
Я так понимаю, с такими запросами даже не следует смотреть в сторону SQL-based БД, т.е., остаются только NoSQL-решения.
Ещё видел штуки вроде:
- MemcacheDB - использует BDB в качестве бэкэнда, профит от самой MemcacheDB неочевиден.
- Apache Cassandra/Apache Hadoop - не подходит, ибо Java.
- MongoDB - документо-ориентированная БД, разве подойдёт под мои задачи?
Жду совето, ЛОР!