1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ZNBase-zn-kvs

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Что такое ZN-KVS

ZN-KVS — это замена RocksDB с оптимизированной задержкой хвоста, пропускной способностью и т. д.

  • ZN-KVS разработан с использованием памяти в качестве основного носителя данных и диска в качестве вспомогательного носителя данных.
  • В ZN-KVS используются WAL и формат файлов SST от Rocksdb для создания логики асинхронной очистки диска.
  • Поддерживает внешний интерфейс Rocksdb.

Примечания

  • ZN-KVS был протестирован и готов к работе только на платформе Linux.
  • Языки программирования, кроме C/C++, ещё не полностью протестированы.
  • Существующие данные можно перенести из ZN-KVS напрямую в RocksDB, но нельзя перенести обратно в ZN-KVS.
  • ZN-KVS был создан на основе версии RocksDB v6.2.1.

Принцип проектирования

  • Однородное хранилище данных смежности в памяти.
  • Данные KV и индекс хранятся отдельно.
  • Индекс постоянно находится в памяти.
  • Хранилище данных KV в памяти максимально возможное.
  • Поток очистки асинхронно обрабатывает новые данные KV.

Обзор архитектуры

Более подробное описание архитектуры здесь.

Использование ZN-KVS

ZN-KVS наследует экспортированный интерфейс от Rocsdb. Поэтому вы можете использовать ZN-KVS так же, как Rocksdb, за исключением добавления одной строки кода «options.pureMemTable = true».

Пример использования:

int main() {
  Options options = Options();
  options.env = Env::Default();
  options.pureMemTable = true;
  rocksdb::DB* db2 = nullptr;
  rocksdb::Status s = DB::Open(options, dbname_+"/db_test", &db2);
  WriteOptions writeOptions = WriteOptions();
  ASSERT_OK(db2->Put(writeOptions,"542", "v2"));
  ASSERT_OK(db2->Put(writeOptions,"444", "v1"));
  ASSERT_OK(db2->Put(writeOptions,"ps", "v3"));
  ASSERT_OK(db2->Put(writeOptions,"ps", "v4"));

  ASSERT_EQ("v1", OpenGet(db2,"444"));
  ASSERT_EQ("v2", OpenGet(db2,"542"));
  ASSERT_EQ("v4", OpenGet(db2,"ps"));
  db2->Close();
  delete db2;
}
std::string OpenGet(DB* db,const std::string& k) {
  ReadOptions options;

  std::string result;
  Status s = db->Get(options, k, &result);
  if (s.IsNotFound()) {
    result = "NOT_FOUND";
  } else if (!s.ok()) {
    result = s.ToString();
  }
  return result;
}

Улучшение производительности

При тестировании данных объёмом всего 1 ГБ ZN-KVS может иметь улучшение производительности поиска не менее 100 % по сравнению с Rocksdb.

Вклад в проект

  • Для управления функциями и исправлениями ошибок ZN-KVS использует проблемы и запросы на вытягивание Github.
  • Все PR приветствуются, включая форматирование кода и рефакторинг.

Лицензия

Apache 2.0

Пользователи

Пожалуйста, сообщите нам, если вы используете ZN-KVS, спасибо!

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
C++ и 6 других языков
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/ZNBase-zn-kvs.git
git@api.gitlife.ru:oschina-mirror/ZNBase-zn-kvs.git
oschina-mirror
ZNBase-zn-kvs
ZNBase-zn-kvs
develop