1. 概述
在这个教程中,我们将探讨ScyllaDB——一个快速且可扩展的NoSQL数据库。我们将了解其特性,并学习如何与它交互。
2. ScyllaDB是什么?
ScyllaDB是一个开源的分布式NoSQL数据库。 它支持与Cassandra相同的协议,但具有显著更高的吞吐量和更低的延迟。它使用C++语言开发。
ScyllaDB有三种变体:
- ScyllaDB开源版:免费且开源,我们将拥有全部所有权,需要自行维护。
- ScyllaDB企业版:付费版本,提供一些高级功能和24/7支持。我们需要自己的基础设施来安装此版本。
- ScyllaDB云服务:由ScyllaDB提供的基于云的服务,无需自建基础设施或进行任何安装和维护。
2.1. 安装
我们将使用开源版本,并在Docker容器中运行,使用以下命令:
$ docker run --name scylla -p 9042:9042 -d scylladb/scylla
我们在这里暴露了端口号9042,将通过这个端口连接到数据库。
现在,让我们连接到数据库,创建一个表并插入一些数据。我们将编写Java代码来获取这些数据。
执行以下命令以连接到数据库:
$ docker exec -it scylla cqlsh
接下来,让我们创建一个带有简单复制策略(因子为3)的命名空间:
CREATE KEYSPACE IF NOT EXISTS baeldung WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
执行以下查询来创建表并插入数据:
CREATE COLUMNFAMILY IF NOT EXISTS baeldung.User (id bigint PRIMARY KEY, name text);
INSERT INTO baeldung.User (id, name) values (1, 'john doe');
3. Java代码实现
我们将编写一个简单的Java程序,连接到本地部署的Scylla DB并执行查询。
3.1. Maven依赖项
在pom.xml
文件中添加Scylla核心库依赖:
<dependency>
<groupId>com.scylladb</groupId>
<artifactId>java-driver-core</artifactId>
<version>4.14.1.0</version>
</dependency>
3.2. Java代码
首先,将连接URL添加到application.yml
文件中:
datastax-java-driver:
basic:
contact-points: 127.0.0.1:9042
有关所有可配置值的更多详细信息,请参阅此处的文档。
现在,让我们获取之前添加的用户名:
try (CqlSession session = CqlSession.builder().build()) {
ResultSet rs = session.execute("select * from baeldung.User");
Row row = rs.one();
return row.getString("name");
}
我们还可以使用*query-builder*
来插入和检索数据。首先,我们需要在pom.xml
文件中添加*java-driver-query-builder*
Maven依赖:
<dependency>
<groupId>com.scylladb</groupId>
<artifactId>java-driver-query-builder</artifactId>
<version>4.14.1.0</version>
</dependency>
现在,我们在代码中编写SELECT和INSERT构建语句来获取和插入数据:
try (CqlSession session = CqlSession.builder().build()) {
InsertInto insert = insertInto("baeldung", "User");
SimpleStatement statement = insert.value("id", literal(2))
.value("name", literal("dev user"))
.build();
ResultSet rs = session.execute(statement);
}
这将在User
表(命名空间baeldung
)中插入一个新用户,id为2,名称为"dev user"。接下来,让我们创建一个SELECT语句,根据名称查找这个用户:
try (CqlSession session = CqlSession.builder().build()) {
Select query = selectFrom("baeldung", "User").all()
.whereColumn("name").isEqualTo(literal("dev user"))
.allowFiltering();;
SimpleStatement statement = query.build();
ResultSet rs = session.execute(statement);
Row row = rs.one();
assertEquals(2, row.getLong("id"));
assertEquals("dev user", row.getString("name");
}
我们可以看到,它将返回我们插入的数据,id为2。
4. 总结
在这里,我们对ScyllaDB进行了快速介绍,学习了如何安装、连接以及执行查询,以及如何从我们的应用程序中与之交互。
如往常一样,示例的完整源代码可以在GitHub上找到。