发布于:2021-01-07 16:17:58
0
169
0
Apache Cassandra是提供高可用性和大规模可伸缩性的数据库。在本教程中,DataStax的云架构师团队负责人Scott Hendrickson向您展示了如何开始使用Apache Cassandra。了解如何为视频推荐应用程序创建服务,以此作为开始学习更多有关Apache Cassandra工作原理的起点。
当今的应用程序会创建大量数据,如果您想从这些数据中获取价值,则必须以正确的方式捕获它。如果您的应用程序必须扩大规模以服务于成千上万的客户,或者如果您打算从设备中获取大量数据写入,那么您就必须能够轻松扩大规模。如果您正在寻找具有大规模可伸缩性和高可用性的数据库,则需要考虑Apache Cassandra™。
首先,Apache Cassandra具有完全分布式的架构,这使得随着时间的推移扩展非常容易-您只需添加更多节点即可。其次,借助Cassandra,您的数据可以轻松地在数据中心和云平台之间复制,这意味着您无需担心停机时间或因意外情况而导致的维护。这也意味着可以同时跨多个云服务运行,并且避免被锁定在特定的云服务中。这可以使您保持控制。
最后,选择Apache Cassandra意味着您会很出色。Cassandra目前在CERN,Comcast,eBay,GitHub,GoDaddy,Hulu,Instagram,Intuit,Netflix,Reddit,The Weather Channel和运行活跃全局数据集的许多公司中使用。
Cassandra入门
启动并运行Apache Cassandra涉及创建Cassandra实例或节点的集群。然后,您可以使用Apache Cassandra™的任何驱动程序连接到群集,这些驱动程序以Java,Python,C ++,C#,Node.js,Ruby和PHP等不同语言提供。
下面,我们将使用用于Apache Cassandra™的DataStax Java驱动程序3.7.1版创建一个简单的Java应用程序。对Java驱动程序(4.0+)的较新版本进行了API更改。请确保为此示例使用适当的版本。
在本教程中,我们将为视频推荐应用程序创建一个服务,该服务将获取数据并使用它。这个名为KillrVideo的应用程序应该是了解更多有关Cassandra的工作原理以及如何在自己的应用程序中应用它的有用的起点。
它具有三层体系结构,这对于云规模的应用程序是常见的,具有Web应用程序,服务层和数据库层。在完整的应用程序中,它将使用具有多个无状态服务的微服务方法。
先决条件:
将您的部署设置为对节点使用公共IP。
从Github下载驱动程序并添加到CLASSPATH,或者可以将以下依赖项添加到Maven POM文件:
<dependencies>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.7.1</version>
<dependency>
<dependencies>
1.创建一个群集对象
Cluster cluster = Cluster.builder().addContactPoint("40.83.177.33").build();
Cluster对象是连接到Cassandra集群的起点,并且是使用Cluster.builder()帮助器类创建的。
用部署中节点的公共IP替换addContactPoint()方法中显示的IP地址。
2.创建一个会话对象
Session session = cluster.connect();
这是驱动程序连接到群集节点的时间。
3.使用Session对象执行语句
session.execute("CREATE KEYSPACE IF NOT EXISTS killrvideo WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};"); session.execute("CREATE TABLE IF NOT EXISTS killrvideo.videos (name TEXT, description TEXT, PRIMARY KEY(name))"); session.execute("INSERT INTO killrvideo.videos (name, description) VALUES (?, ?);", "Avengers: Endgame", "No spoilers"); ResultSet rs = session.execute("SELECT * FROM killrvideo.videos WHERE name = ?;", "Avengers: Endgame"); for (Row row : rs) { System.out.println("Name:" + row.getString("name")); System.out.println("Description: " + row.getString("description")); }
execute()方法用于运行CQL语句。
前两个语句创建了我们的数据模型,它是一个键空间killrvideo和一个表格videos。通常,您将需要在应用程序外部创建数据模型,但是我们在此处这样做是为了最小化此示例的步骤。
第三条语句在新创建的表中插入一行。
最后一条语句运行查询,该查询返回ResultSet对象。
ResultSet是一个Iterable对象,可以使用for循环进行处理以遍历查询结果中的每一行。
完整代码
import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; public class Application { public static void main(String[] args) { Cluster cluster = Cluster.builder().addContactPoint("40.83.177.33").build(); Session session = cluster.connect(); session.execute("CREATE KEYSPACE IF NOT EXISTS killrvideo WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};"); session.execute("CREATE TABLE IF NOT EXISTS killrvideo.videos (name TEXT, description TEXT, PRIMARY KEY(name))"); session.execute("INSERT INTO killrvideo.videos (name, description) VALUES (?, ?);", "Avengers: Endgame", "No spoilers"); ResultSet rs = session.execute("SELECT * FROM killrvideo.videos WHERE name = ?;", "Avengers: Endgame"); for (Row row : rs) { System.out.println("Name:" + row.getString("name")); System.out.println("Description: " + row.getString("description")); } cluster.close(); } }
运行应用程序
作者介绍