KarelDB 是一款功能齐全的关系数据库,它几乎完全基于开源组件构建,包括用于 SQL 引擎的 Apache Calcite 以及用于事务和控制功能的 Apache Omid,并由应用广泛的 Apache Kafka 流处理软件提供支持。
获取方法
Maven
<dependency>
<groupId>io.kareldb</groupId>
<artifactId>kareldb-core</artifactId>
<version>0.1.6</version>
</dependency>
使用方法
服务器模式(Server Mode)
如需运行 KarelDB,先下载一份 release 版本进行解压,然后修改config/kareldb.properties
以指向现有的 Kafka broker,接着运行以下命令:
$ bin/kareldb-start config/kareldb.properties
在单独的终端上,输入以下命令来启动sqlline
,这是用于访问 JDBC 数据库的命令行程序。
$ bin/sqlline
sqlline version 1.8.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 客户端列表。
嵌入模式(Embedded Mode)
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.rocksdb.root.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"); ... }
支持 ANSI SQL
KarelDB 可通过使用 Calcite 支持 ANSI SQL。
当创建表时,在各列之后指定主键约束,如下所示:
CREATE TABLE customers
(id int, name varchar, constraint pk primary key (id));
如果未指定主键约束,则表中的第一列将被指定为主键。
KarelDB 通过添加对 ALTER TABLE 命令的支持来扩展 Calcite 的 SQL 语法。
alterTableStatement:
ALTER TABLE tableName columnAction [ , columnAction ]*
columnAction:
( ADD tableElement ) | ( DROP columnName )
KarelDB 支持以下 SQL 类型:
- boolean
- integer
- bigint
- real
- double
- varbinary
- varchar
- decimal
- date
- time
- timestamp
评论