KarelDB — реляционная база данных, поддерживаемая Apache Kafka
KarelDB представляет собой полнофункциональную реляционную базу данных, которая поддерживается Apache Kafka.
Релизы KarelDB размещаются в Maven Central.
<dependency>
<groupId>io.kareldb</groupId>
<artifactId>kareldb-core</artifactId>
<version>1.0.0</version>
</dependency>
Чтобы запустить KarelDB, скачайте релиз с GitHub, распакуйте его и измените файл config/kareldb.properties, чтобы он указывал на существующего брокера Kafka. Затем выполните следующую команду:
$ bin/kareldb-start config/kareldb.properties
В отдельном терминале введите следующую команду, чтобы запустить sqlline, утилиту командной строки для доступа к базам данных JDBC.
$ bin/sqlline
sqlline version 1.9.0
sqlline> !connect jdbc:avatica:remote:url=http://localhost:8765 admin admin
sqlline> create table books (id int, name varchar, author varchar);
No rows affected (0.114 seconds)
sqlline> insert into books values (1, 'The Trial', 'Franz Kafka');
1 row affected (0.576 seconds)
sqlline> select * from books;
+----+-----------+-------------+
| ID | NAME | AUTHOR |
+----+-----------+-------------+
| 1 | The Trial | Franz Kafka |
+----+-----------+-------------+
1 row selected (0.133 seconds)
Для доступа к серверу KarelDB из удалённого приложения используйте клиент Avatica JDBC. Список клиентов Avatica JDBC можно найти здесь.
Если несколько серверов KarelDB настроены с одним и тем же идентификатором группы кластеров (см. раздел «Конфигурация»), они образуют кластер, и один из них будет выбран в качестве лидера, а остальные станут последователями (репликами). Если последователь получает запрос, он будет перенаправлен лидеру. Если лидер выходит из строя, один из последователей будет избран новым лидером.
KarelDB также может использоваться во встроенном режиме. Вот пример:
Properties properties = new Properties();
properties.put("schemaFactory", "io.kareldb.schema.SchemaFactory");
properties.put("parserFactory", "org.apache.calcite.sql.parser.parserextension.ExtensionSqlParserImpl#FACTORY");
properties.put("schema.kind", "io.kareldb.kafka.KafkaSchema");
properties.put("schema.kafkacache.bootstrap.servers", bootstrapServers);
properties.put("schema.kafkacache.data.dir", "/tmp");
try (Connection conn = DriverManager.getConnection("jdbc:kareldb:", properties);
Statement s = conn.createStatement()) {
s.execute("create table books (id int, name varchar, author varchar)");
s.executeUpdate("insert into books values(1, 'The Trial', 'Franz Kafka')");
ResultSet rs = s.executeQuery("select * from books");
...
}
KarelDB поддерживает ANSI SQL с использованием Calcite. При создании таблицы ограничение первичного ключа должно быть указано после столбцов следующим образом:
CREATE TABLE customers
(id int, name varchar, constraint pk primary key (id));
Если ограничение первичного ключа не указано, первый столбец в таблице будет назначен первичным ключом.
KarelDB расширяет грамматику SQL Calcite, добавляя поддержку команд ALTER TABLE.
alterTableStatement:
ALTER TABLE tableName columnAction [ , columnAction ]*
columnAction:
( ADD tableElement ) | ( DROP columnName )
KarelDB поддерживает следующие типы SQL: — boolean — integer — bigint — real — double Омид (https://omid.incubator.apache.org) — для управления транзакциями и поддержки многоверсионности конкурентных данных (MVCC).
Apache Avatica (https://calcite.apache.org/avatica/) — для функциональности JDBC.
Подробнее о дизайне KarelDB можно узнать из этого блога (https://yokota.blog/2019/09/23/building-a-relational-database-using-kafka).
Возможные улучшения в будущем включают поддержку вторичных индексов.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )