KarelDB是一款功能齐全的关系数据库,它几乎完全基于开源组件构建,包括用于SQL引擎的ApacheCalcite以及用于事务和控制功能的ApacheOmid,并由应用广泛的ApacheKafka流处理软件提供支持。
获取方法Maven<dependency><groupId>io.kareldb</groupId><artifactId>kareldb-core</artifactId><version>0.1.6</version></dependency>使用方法服务器模式(ServerMode)如需运行 KarelDB,先下载一份 release 版本进行解压,然后修改config/kareldb.properties以指向现有的Kafkabroker,接着运行以下命令:
$bin/kareldb-startconfig/kareldb.properties在单独的终端上,输入以下命令来启动sqlline,这是用于访问JDBC数据库的命令行程序。
$bin/sqllinesqllineversion1.8.0sqlline>!connectjdbc:avatica:remote:url=https://localhost:8765adminadminsqlline>createtablebooks(idint,namevarchar,authorvarchar);Norowsaffected(0.114seconds)sqlline>insertintobooksvalues(1,'TheTrial','FranzKafka');1rowaffected(0.576seconds)sqlline>select*frombooks;+----+-----------+-------------+|ID|NAME|AUTHOR|+----+-----------+-------------+|1|TheTrial|FranzKafka|+----+-----------+-------------+1rowselected(0.133seconds)要从远程应用程序访问KarelDB服务器,请使用AvaticaJDBC客户端。可以在此处找到AvaticaJDBC客户端列表。
嵌入模式(EmbeddedMode)KarelDB也可以在嵌入模式中使用。例子如下:
Propertiesproperties=newProperties();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(Connectionconn=DriverManager.getConnection("jdbc:kareldb:",properties);Statements=conn.createStatement()){s.execute("createtablebooks(idint,namevarchar,authorvarchar)");s.executeUpdate("insertintobooksvalues(1,'TheTrial','FranzKafka')");ResultSetrs=s.executeQuery("select*frombooks");...}支持ANSISQLKarelDB可通过使用 Calcite 支持ANSISQL。
当创建表时,在各列之后指定主键约束,如下所示:
CREATETABLEcustomers(idint,namevarchar,constraintpkprimarykey(id));如果未指定主键约束,则表中的第一列将被指定为主键。
KarelDB通过添加对ALTERTABLE命令的支持来扩展Calcite的SQL语法。alterTableStatement:ALTERTABLEtableNamecolumnAction[,columnAction]*columnAction:(ADDtableElement)|(DROPcolumnName)KarelDB支持以下SQL类型:
booleanintegerbigintrealdoublevarbinaryvarchardecimaldatetimetimestamp
评论