發(fā)布于:2021-01-07 16:17:58
0
199
0
Apache Cassandra是提供高可用性和大規(guī)模可伸縮性的數(shù)據(jù)庫。在本教程中,DataStax的云架構(gòu)師團(tuán)隊(duì)負(fù)責(zé)人Scott Hendrickson向您展示了如何開始使用Apache Cassandra。了解如何為視頻推薦應(yīng)用程序創(chuàng)建服務(wù),以此作為開始學(xué)習(xí)更多有關(guān)Apache Cassandra工作原理的起點(diǎn)。
當(dāng)今的應(yīng)用程序會(huì)創(chuàng)建大量數(shù)據(jù),如果您想從這些數(shù)據(jù)中獲取價(jià)值,則必須以正確的方式捕獲它。如果您的應(yīng)用程序必須擴(kuò)大規(guī)模以服務(wù)于成千上萬的客戶,或者如果您打算從設(shè)備中獲取大量數(shù)據(jù)寫入,那么您就必須能夠輕松擴(kuò)大規(guī)模。如果您正在尋找具有大規(guī)模可伸縮性和高可用性的數(shù)據(jù)庫,則需要考慮Apache Cassandra?。
首先,Apache Cassandra具有完全分布式的架構(gòu),這使得隨著時(shí)間的推移擴(kuò)展非常容易-您只需添加更多節(jié)點(diǎn)即可。其次,借助Cassandra,您的數(shù)據(jù)可以輕松地在數(shù)據(jù)中心和云平臺(tái)之間復(fù)制,這意味著您無需擔(dān)心停機(jī)時(shí)間或因意外情況而導(dǎo)致的維護(hù)。這也意味著可以同時(shí)跨多個(gè)云服務(wù)運(yùn)行,并且避免被鎖定在特定的云服務(wù)中。這可以使您保持控制。
最后,選擇Apache Cassandra意味著您會(huì)很出色。Cassandra目前在CERN,Comcast,eBay,GitHub,GoDaddy,Hulu,Instagram,Intuit,Netflix,Reddit,The Weather Channel和運(yùn)行活躍全局?jǐn)?shù)據(jù)集的許多公司中使用。
Cassandra入門
啟動(dòng)并運(yùn)行Apache Cassandra涉及創(chuàng)建Cassandra實(shí)例或節(jié)點(diǎn)的集群。然后,您可以使用Apache Cassandra?的任何驅(qū)動(dòng)程序連接到群集,這些驅(qū)動(dòng)程序以Java,Python,C ++,C#,Node.js,Ruby和PHP等不同語言提供。
下面,我們將使用用于Apache Cassandra?的DataStax Java驅(qū)動(dòng)程序3.7.1版創(chuàng)建一個(gè)簡單的Java應(yīng)用程序。對(duì)Java驅(qū)動(dòng)程序(4.0+)的較新版本進(jìn)行了API更改。請(qǐng)確保為此示例使用適當(dāng)?shù)陌姹尽?/span>
在本教程中,我們將為視頻推薦應(yīng)用程序創(chuàng)建一個(gè)服務(wù),該服務(wù)將獲取數(shù)據(jù)并使用它。這個(gè)名為KillrVideo的應(yīng)用程序應(yīng)該是了解更多有關(guān)Cassandra的工作原理以及如何在自己的應(yīng)用程序中應(yīng)用它的有用的起點(diǎn)。
它具有三層體系結(jié)構(gòu),這對(duì)于云規(guī)模的應(yīng)用程序是常見的,具有Web應(yīng)用程序,服務(wù)層和數(shù)據(jù)庫層。在完整的應(yīng)用程序中,它將使用具有多個(gè)無狀態(tài)服務(wù)的微服務(wù)方法。
先決條件:
將您的部署設(shè)置為對(duì)節(jié)點(diǎn)使用公共IP。
從Github下載驅(qū)動(dòng)程序并添加到CLASSPATH,或者可以將以下依賴項(xiàng)添加到Maven POM文件:
<dependencies>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.7.1</version>
<dependency>
<dependencies>
1.創(chuàng)建一個(gè)群集對(duì)象
Cluster cluster = Cluster.builder().addContactPoint("40.83.177.33").build();
Cluster對(duì)象是連接到Cassandra集群的起點(diǎn),并且是使用Cluster.builder()幫助器類創(chuàng)建的。
用部署中節(jié)點(diǎn)的公共IP替換addContactPoint()方法中顯示的IP地址。
2.創(chuàng)建一個(gè)會(huì)話對(duì)象
Session session = cluster.connect();
這是驅(qū)動(dòng)程序連接到群集節(jié)點(diǎn)的時(shí)間。
3.使用Session對(duì)象執(zhí)行語句
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()方法用于運(yùn)行CQL語句。
前兩個(gè)語句創(chuàng)建了我們的數(shù)據(jù)模型,它是一個(gè)鍵空間killrvideo和一個(gè)表格videos。通常,您將需要在應(yīng)用程序外部創(chuàng)建數(shù)據(jù)模型,但是我們在此處這樣做是為了最小化此示例的步驟。
第三條語句在新創(chuàng)建的表中插入一行。
最后一條語句運(yùn)行查詢,該查詢返回ResultSet對(duì)象。
ResultSet是一個(gè)Iterable對(duì)象,可以使用for循環(huán)進(jìn)行處理以遍歷查詢結(jié)果中的每一行。
完整代碼
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(); } }
運(yùn)行應(yīng)用程序
作者介紹