SummitDB — это база данных «ключ-значение» в оперативной памяти. Она сохраняется на диск, использует алгоритм консенсуса Raft, соответствует требованиям ACID и построена на транзакционной и строго согласованной модели.
Поддерживает пользовательские индексы, геопространственные данные, документы JSON и пользовательский JS-скрипт.
Под капотом используются Finn, Redcon, BuntDB, GJSON и Otto.
Особенности:
Начало работы:
Если вы хотите попробовать последнюю версию, вы можете собрать SummitDB из основной ветки. 2. Сборка SummitDB. SummitDB можно скомпилировать и использовать в Linux, OSX, Windows, FreeBSD, ARM (Raspberry PI) и, вероятно, других системах, поскольку кодовая база на 100% написана на Go. Мы поддерживаем как 32-битные, так и 64-битные системы. На компьютере сборки должен быть установлен Go.
Чтобы собрать, просто выполните команду:
$ make
Рекомендуется установить redis-cli.
$ make redis-cli
Для запуска тестов:
$ make test
$ ./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.
SummitDB хранит все данные в памяти. Однако каждая записываемая команда добавляется к файлу, который используется для восстановления базы данных при необходимости перезапуска.
Это похоже на постоянство Redis AOF.
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.
Например, предположим, что у вас есть следующие документы:
{"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 )