Apache Cassandra入门

发布于:2021-01-07 16:17:58

0

168

0

Apache Cassandra 教程 入门

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();    } }

运行应用程序

{xunruicms_img_title}