Подтвердить что ты не робот

Есть что-то вроде Redis DB, но не ограничивается объемом оперативной памяти?

Я ищу базу данных, соответствующую этим критериям:

  • Может быть непостоянным;
  • Почти все ключи БД необходимо обновлять один раз в 3-6 часов (ключи 100 М + с общим размером 100 ГБ).
  • Возможность быстрого выбора данных с помощью ключа (или основного ключа)
  • Это должна быть СУБД (поэтому LevelDB не подходит)
  • Когда данные записываются, кластер БД должен иметь возможность обслуживать запросы (отдельные узлы могут быть заблокированы)
  • Не в памяти - наш набор данных превысит пределы RAM
  • Горизонтальное масштабирование и репликация
  • Поддержка полной перезаписи всех данных (MongoDB не очищает пространство после удаления данных)
  • Поддержка С# и Java

Здесь мой процесс работы с такой базой данных: У нас есть аналитический кластер, который производит 100 М записей (50 ГБ) данных каждые 4-6 часов. Данные представляют собой "ключевой массив" [20] ". Эти данные должны быть распределены пользователям через внешнюю систему со скоростью 1-10 тыс. Запросов в секунду. В среднем запрашивается только ~ 15% данных, остальная часть будет перезаписана через 4-6 часов при создании следующего набора данных.

Что я пробовал:

  • MongoDB. Накладные расходы на хранение, высокая стоимость дефрагментации.
  • Redis. Выглядит отлично, но он ограничен оперативной памятью, и наши данные превышают ее.

Итак, вопрос: есть ли что-то вроде Redis, но не ограничивается объемом ОЗУ?

4b9b3361

Ответ 1

Да, есть две альтернативы Redis, которые не ограничены размером ОЗУ, оставаясь совместимыми с протоколом Redis:

Ardb (С++), репликация (Master-Slave/Master-Master): https://github.com/yinqiwen/ardb

Резидентный сервер хранения данных, совместимый с протоколом redis, поддерживает LevelDB/KyotoCabinet/LMDB как механизм хранения.

Edis (Erlang): http://inaka.github.io/edis/

Edis - это совместимая с протоколом замена сервера для Redis, написанная на Erlang. Целью Edis является замещение Redis, когда настойчивость важнее, чем хранение данных в памяти. Edis (в настоящее время) использует Googledddb как бэкэнд.

И для полноты здесь есть другая база данных данных:

Гипердекс (строки, целые числа, поплавки, списки, наборы, карты): http://hyperdex.org/doc/latest/DataTypes/#chap:data-types

HyperDex:

  • Быстрый: HyperDex имеет более низкую задержку, более высокую пропускную способность и ниже чем другие хранилища ключей.
  • Масштабируемость: HyperDex масштабируется как в систему добавлено больше машин.
  • Согласование: гарантии HyperDex линеаризуемость для операций с ключами. Таким образом, чтение всегда возвращается последнее значение, вставленное в систему. Не только "в конце концов", но немедленно и всегда.
  • Отказоустойчивость: HyperDex автоматически реплицирует данные на нескольких машинах, так что одновременные сбои вверх к пределу, установленному приложением, не приведет к потере данных. Доступный для поиска:
  • HyperDex обеспечивает эффективный поиск вторичных данных атрибутов.
  • Простота использования: HyperDex предоставляет API для различных сценариев и родных языков.
  • Самообслуживание: HyperDex - это самообслуживания и требует небольшого обслуживания пользователей.

Ответ 2

Да, SSDB (https://github.com/ideawu/ssdb), он имеет очень похожие API для Redis: http://www.ideawu.com/ssdb/docs/php/

SSDB поддерживает хэш, zset. Он использует leveldb как механизм хранения, большинство данных хранится на диске, оперативная память используется для кеша. В нашем экземпляре SSDB с данными 300 ГБ он использует только ОЗУ 800 МБ.

Ответ 3

В эти дни вы можете легко найти серверы с объемом памяти более 100 ГБ для размещения одного экземпляра, или вы можете обмануть свои данные и использовать несколько серверов с меньшей оперативной памятью. Хранение 100 ГБ с Redis (в ОЗУ) на самом деле не проблема.

Теперь, если вы действительно хотите, чтобы клон Redis не ограничивался размером ОЗУ, есть NDS (Matt Palmer):

Обратите внимание, что база данных хранилища NDS переместилась из Киотского кабинета в LMDB (очень хороший пакет, который также поддерживает OpenLDAP), именно из-за проблем с возвратом пространства после удаленных ключей.

Другие решения, не совместимые с Redis, также могут удовлетворить ваши потребности: Couchbase и Aerospike, например, могут легко поддерживать вашу пропускную способность. Кассандра и Риак, вероятно, будут работать, если у вас будет достаточно узлов.