Apache Cassandra和Java入门(第二部分)
要求
要遵循本教程,您應該已經有一個正在運行的Cassandra實例( 一個小型集群會很好 ,但不是必需的),已安裝Datastax Java驅動程序( 請參閱第I部分 ),并且已經在這里進行了10分鐘的演練: http ://planetcassandra.org/create-a-keyspace-and-table/ 。
試試看
對于本演示,我們將創建一個簡單的控制臺應用程序,該應用程序幾乎與第I部分中的應用程序相同,只是這次我們將探索連接策略,準備好的語句和查詢生成器。 打開文本編輯器,并使用“ GettingStartedTwo”類和單個main方法創建一個Java文件。
public class GettingStartedTwo {public static void main(String[] args) {Cluster cluster;Session session;ResultSet results;Row rows;然后,我們可以連接到集群并創建一個會話實例。
// Connect to the cluster and keyspace "demo" Cluster cluster = Cluster.builder().addContactPoint("localhost").build(); Session session = cluster.connect("demo");但是,等等,既然我們正在運行一個群集而不是一個實例,那么在故障轉移的情況下,我們需要采取一些保護措施。 我們可以使用RetryPolicy來做到這一點。retry策略確定當請求超時或節點不可用時要采用的默認行為。 在這種情況下,我們使用DefaultRetryPolicy,它將重試查詢之一:
- 讀取超時時,已回復足夠多的副本但未接收到數據。
- 在寫超時時,如果我們在寫批處理語句使用的日志時超時。
負載平衡策略將確定要在哪個節點上運行查詢。 由于客戶端可以讀取或寫入任何節點,因此有時效率低下。 如果一個節點收到另一個節點擁有的讀取或寫入,它將為客戶端協調該請求。 我們可以使用負載平衡策略來控制該操作。 TokenAwarePolicy確保請求將轉到負責主鍵指示的數據的節點或副本。 它包裝在DCAwareRoundRobinPolicy周圍,以確保請求保留在本地數據中心中。 這對我們來說是一個不錯的選擇,因為盡管目前我們只有一個本地集群,但我們已經在考慮下一步,將其擴展到多數據中心。
cluster = Cluster.builder().addContactPoint("192.168.0.30").withRetryPolicy(DefaultRetryPolicy.INSTANCE).withLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy())).build(); session = cluster.connect("demo");現在您已連接到“演示”鍵空間,現在將用戶插入“用戶”表中。 這正是我們之前在第一部分中所做的,但是這次我們的做法有所不同。 使用準備好的語句更加安全,這是將數據移入或移出數據庫的最有效方式。 集群只需要對準備好的語句進行一次解析,然后將值綁定到變量,然后我們執行綁定的語句以從集群讀取/寫入數據。
// Insert one record into the users tablePreparedStatement statement = session.prepare("INSERT INTO users" + "(lastname, age, city, email, firstname)"+ "VALUES (?,?,?,?,?);");BoundStatement boundStatement = new BoundStatement(statement);session.execute(boundStatement.bind("Jones", 35, "Austin","bob@example.com", "Bob"));使用Java驅動程序,我們可以輕松地撤消用戶。 在Java的Apache Cassandra入門入門的第一部分中,我們使用了CQL的字符串表示形式。 現在(以及本教程的其余部分),我們將使用Query Builder進行相同的操作,它更加安全,并且可以避免潛在的CQL注入攻擊。
// Use select to get the user we just enteredStatement select = QueryBuilder.select().all().from("demo", "users").where(eq("lastname", "Jones"));results = session.execute(select);for (Row row : results) {System.out.format("%s %d \n", row.getString("firstname"),row.getInt("age"));}由于是鮑勃(Bob)的生日,我們將更新他的年齡。
// Update the same user with a new ageStatement update = QueryBuilder.update("demo", "users").with(QueryBuilder.set("age", 36)).where((QueryBuilder.eq("lastname", "Jones")));session.execute(update); // Select and show the changeselect = QueryBuilder.select().all().from("demo", "users").where(eq("lastname", "Jones"));results = session.execute(select);for (Row row : results) {System.out.format("%s %d \n", row.getString("firstname"),row.getInt("age"));現在,讓我們從表中刪除Bob,并打印出剩余在users表中的所有信息。 您會注意到,鮑勃的信息在刪除后不再返回(如果您以前插入過用戶,則其他人可能會回來)。
// Delete the user from the users tableStatement delete = QueryBuilder.delete().from("users").where(QueryBuilder.eq("lastname", "Jones"));results = session.execute(delete);// Show that the user is goneselect = QueryBuilder.select().all().from("demo", "users");results = session.execute(select);for (Row row : results) {System.out.format("%s %d %s %s %s\n", row.getString("lastname"),row.getInt("age"), row.getString("city"),row.getString("email"), row.getString("firstname"));}完成后,請確保連接關閉。
// Clean up the connection by closing it cluster.close();} }CQL與SQL非常相似,在許多情況下,相同的語法將起作用。 如果您具有關系數據庫的背景知識,這使得查詢數據非常簡單。您剛剛設法連接到Cassandra集群并針對實時(本地)數據庫執行查詢。 希望這證明了使用Java驅動程序使用Cassandra多么容易。 GitHub上提供了此示例的完整控制臺應用程序的要點。
翻譯自: https://www.javacodegeeks.com/2014/12/getting-started-with-apache-cassandra-and-java-part-ii.html
總結
以上是生活随笔為你收集整理的Apache Cassandra和Java入门(第二部分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓轰炸机免费版(手机轰炸机安卓版)
- 下一篇: Apache Cassandra和Jav