使用 Java 的 ScyllaDB 簡介
一、概述
在本教程中,我們將探索ScyllaDB——一種快速且可擴展的 NoSQL 數據庫。我們將看到它的功能以及如何與之交互。
2.什麼是ScyllaDB?
ScyllaDB 是一個開源的分佈式 NoSQL 數據庫。它支持與 Cassandra 相同的協議,具有更高的吞吐量和更低的延遲。它是使用C++語言開發的。
ScyllaDB 具有三個變體:
- ScyllaDB Open Source:這是一個免費的開源版本。我們將擁有完全所有權,需要自己進行維護
- ScyllaDB Enterprise:這是一個付費版本,我們將在其中獲得一些高級功能和 24/7 支持。我們需要使用我們自己的基礎設施來安裝這個變體
- ScyllaDB Cloud:這是 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 數據庫並執行查詢。
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](https://java-driver.docs.scylladb.com/stable/manual/query_builder/)
來插入和獲取數據。我們首先需要將java-driver-query-builder
Maven 依賴項添加到pom.xml
文件中:
<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);
}
它將在命名空間baeldung
的表User
中插入一個id = 2 and name = “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 上獲得。