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

OSCHINA-MIRROR/mirrors-SummitDB

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

SummitDB — это база данных «ключ-значение» в оперативной памяти. Она сохраняется на диск, использует алгоритм консенсуса Raft, соответствует требованиям ACID и построена на транзакционной и строго согласованной модели.

Поддерживает пользовательские индексы, геопространственные данные, документы JSON и пользовательский JS-скрипт.

Под капотом используются Finn, Redcon, BuntDB, GJSON и Otto.

Особенности:

  • оперативная память с сохранением на диске;
  • строгая согласованность и долговечность;
  • высокая доступность;
  • упорядоченное ключевое пространство;
  • горячие резервные копии;
  • упрощённые API в стиле Redis;
  • индексация значений;
  • документы JSON;
  • пространственная индексация;
  • токены ограждения.

Начало работы:

  1. Получение SummitDB. Самый простой способ получить SummitDB — использовать один из готовых двоичных файлов выпуска, доступных для OSX, Linux и Windows. Инструкции по использованию этих двоичных файлов приведены на странице выпусков GitHub.

Если вы хотите попробовать последнюю версию, вы можете собрать SummitDB из основной ветки. 2. Сборка SummitDB. SummitDB можно скомпилировать и использовать в Linux, OSX, Windows, FreeBSD, ARM (Raspberry PI) и, вероятно, других системах, поскольку кодовая база на 100% написана на Go. Мы поддерживаем как 32-битные, так и 64-битные системы. На компьютере сборки должен быть установлен Go.

Чтобы собрать, просто выполните команду:

$ make

Рекомендуется установить redis-cli.

$ make redis-cli

Для запуска тестов:

$ make test
  1. Docker. Ознакомьтесь с образами SummitDB в Docker Hub.
  2. Запуск. Сначала запустите кластер с одним участником:
$ ./summitdb-server

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

Затем установим один ключ и получим его:

$ ./redis-cli -p 7481 SET mykey "my value"
OK
$ ./redis-cli -p 7481 GET mykey
"my value"

Добавление участников:

$ ./summitdb-server -p 7482 -dir data2 -join localhost:7481
$ ./summitdb-server -p 7483 -dir data3 -join localhost:7481

Теперь, если узел 1 выйдет из строя, узлы 2 и 3 продолжат работу. 5. Различия между SummitDB и Redis. Стоит отметить, что хотя SummitDB поддерживает многие функции Redis, это не строгий клон Redis. В Redis есть множество команд и типов данных, которые недоступны в SummitDB, таких как наборы, хэши, отсортированные наборы и PubSub. SummitDB также имеет множество функций, недоступных в Redis: * Упорядоченное ключевое пространство — SummitDB предоставляет одно ключевое пространство, которое представляет собой большое B-дерево. Упорядоченное ключевое пространство позволяет стабильно перемещаться по ключам с помощью команды KEYS. Redis использует неупорядоченную структуру словаря и предоставляет специализированную команду SCAN для перебора ключей. * Всё строка — SummitDB хранит только строки, которые являются точными двоичными представлениями того, что пользователь сохраняет. В Redis много внутренних типов данных, таких как строки, хэши, числа с плавающей запятой, наборы и т. д. * Кластеры Raft — SummitDB использует алгоритм консенсуса Raft для обеспечения высокой доступности. Redis обеспечивает репликацию Master/Slave. Javascript - SummitDB использует Javascript для пользовательских скриптов. Redis использует Lua.

  • Индексы - SummitDB предоставляет API для индексации ключевого пространства. Индексы позволяют быстро запрашивать и перебирать значения. В Redis есть специализированные типы данных, такие как отсортированные множества и хэши, которые могут обеспечивать вторичное индексирование.

  • Пространственные индексы - SummitDB позволяет создавать пространственные индексы. Пространственный индекс использует R-дерево внутри, и каждый индекс может иметь до 20 измерений. Это полезно для геопространственных, статистических, временных данных и данных диапазона. В Redis есть GEO API, который позволяет использовать хранение и запрос геопространственных данных с помощью Geohashes.

  • JSON документы - SummitDB позволяет хранить JSON документы и индексировать поля напрямую. В Redis есть хэши и парсер JSON через Lua.

In-memory с дисковым сохранением

SummitDB хранит все данные в памяти. Однако каждая записываемая команда добавляется к файлу, который используется для восстановления базы данных при необходимости перезапуска.

Это похоже на постоянство Redis AOF.

JSON Документы

SummitDB предоставляет команды JSET, JGET и JDEL для работы с документами JSON.

JSET и JDEL используют синтаксис пути sjson, а JGET использует синтаксис пути gjson.

Вот несколько примеров:

> JSET user:101 name Tom
OK
> JSET user:101 age 46
OK
> GET user:101
"{\"age\":46,\"name\":\"Tom\"}"
> JGET user:101 age
"46"
> JSET user:101 name.first Tom
OK
> JSET user:101 name.last Anderson
OK
> GET user:101
"{\"age\":46,\"name\":{\"last\":\"Anderson\",\"first\":\"Tom\"}}"
> JDEL user:101 name.last
(integer) 1
> GET user:101
"{\"age\":46,\"name\":{\"first\":\"Tom\"}}"
> JSET user:101 friends.0 Carol
OK
> JSET user:101 friends.1 Andy
OK
> JSET user:101 friends.3 Frank
OK
> GET user:101
"{\"friends\":[\"Carol\",\"Andy\",null,\"Frank\"],\"age\":46,\"name\":{\"first\":\"Tom\"}}"
> JGET user:101 friends.1
"Andy"

Индексы JSON

Можно создавать индексы для отдельных полей внутри документов JSON.

Например, предположим, что у вас есть следующие документы:

{"name":{"first":"Tom","last":"Johnson"},"age":38}
{"name":{"first":"Janet","last":"Prichard"},"age":47}
{"name":{"first":"Carol","last":"Anderson"},"age":52}
{"name":{"first":"Alan","last":"Cooper"},"age":28}

Создайте индекс:

> SETINDEX last_name user:* JSON name.last

Затем добавьте немного JSON:

> SET user:1 '{"name":{"first":"Tom","last":"Johnson"},"age":38}'
> SET user:2 '{"name":{"first":"Janet","last":"Prichard"},"age":47}'
> SET user:3 '{"name":{"first":"Carol","last":"Anderson"},"age":52}'
> SET user:4 '{"name":{"first":"Alan","last":"Cooper"},"age":28}'

Выполните запрос с командой ITER:

> ITER last_name
1) "user:3"
2) "{\"name\":{\"first\":\"Carol\",\"last\":\"Anderson\"},\"age\":52}"
3) "user:4"
4) "{\"name\":{\"first\":\"Alan\",\"last\":\"Cooper\"},\"age\":28}"
5) "user:1"
6) "{\"name\":{\"first\":\"Tom\",\"last\":\"Johnson\"},\"age\":38}"
7) "user:2"
8) "{\"name\":{\"first\":\"Janet\",\"last\":\"Prichard\"},\"age\":47}"

Или, возможно, вы хотите проиндексировать возраст:

> SETINDEX age user:* JSON age
> ITER age
1) "user:4"
2) "{\"name\":{\"first\":\"Alan\",\"last\":\"Cooper\"},\"age\":28}"
3) "user:1"
4) "{\"name\":{\"first\":\"Tom\",\"last\":\"Johnson\"},\"age\":38}"
5) "user:2"
6) "{\"name\":{\"first\":\"Janet\",\"last\":\"Prichard\"},\"age\":47}"
7) "user:3"
8) "{\"name\":{\"first\":\"Carol\",\"last\":\"Anderson\"},\"age\":52}"

Также можно выполнить мультииндексирование по двум полям:

> SETINDEX last_name_age user:* JSON name.last JSON age

Для полного синтаксиса индексирования JSON проверьте SETINDEX и

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

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

Введение

SummitDB — это база данных типа Key/Value в памяти с поддержкой персистентности данных на диске, использующая алгоритм консенсуса Raft и соответствующая принципам ACID. Она имеет встроенную поддержку транзакций и модель строгой согласованности. Развернуть Свернуть
MIT
Отмена

Обновления

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

Участники

все

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

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