Cassandra--Java API
前面已经说了一种访问Cassandra
的一种方式CQL,本篇博客还讲解一下其他的方式访问,主要是以Java API的方式,当然它是支持很多语言的,看看下图就知道了:
Java API
- Cassandra 的Java API官网给出了如下几种,都是一些公司写的开源客户端,我们这里主要看一下datastax的
直接看代码吧
访问前修改一下
cassandra.yaml
配置文件1
2
3start_rpc: true
rpc_address: 0.0.0.0
broadcast_rpc_address: 1.2.3.4下面的代码来源于:https://github.com/jbisso/cassandra-samples
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
/**
* A simple client application that illustrates connecting to
* a Cassandra cluster. retrieving metadata, creating a schema,
* loading data into it, and then querying it.
*/
public class SimpleClient {
private Session session;
public SimpleClient() {
}
/**
* Connects to the specified node.
* @param node a host name or IP address of the node in the cluster
*/
public void connect(String node) {
Cluster cluster = Cluster.builder()
.addContactPoint(node)
// .withCredentials("xiaoxiaomo", "blog")
.build();
Metadata metadata = cluster.getMetadata();
System.out.printf("Connected to cluster: %s\n",
metadata.getClusterName());
session = cluster.connect();
}
public void connect(String[] nodes,int port) {
Cluster cluster = Cluster.builder()
.addContactPoints(nodes)
.withPort(port)
.withCredentials("xiaoxiaomo", "blog")
.build();
Metadata metadata = cluster.getMetadata();
System.out.printf("Connected to cluster: %s\n",
metadata.getClusterName());
session = cluster.connect();
}
/**
* Creates the simplex keyspace and two tables, songs and playlists.
*/
public void createSchema() {
session.execute(
"CREATE KEYSPACE IF NOT EXISTS simplex WITH replication " +
"= {'class':'SimpleStrategy', 'replication_factor':3};");
// create songs and playlist tables
session.execute(
"CREATE TABLE IF NOT EXISTS simplex.songs (" +
"id uuid PRIMARY KEY," +
"title text," +
"album text," +
"artist text," +
"tags set<text>," +
"data blob" +
");");
session.execute(
"CREATE TABLE IF NOT EXISTS simplex.playlists (" +
"id uuid," +
"title text," +
"album text, " +
"artist text," +
"song_id uuid," +
"PRIMARY KEY (id, title, album, artist)" +
");");
System.out.println("Simplex keyspace and schema created.");
}
/**
* Loads some data into the schema so that we can query the tables.
*/
public void loadData() {
// insert data in the tables
session.execute(
"INSERT INTO simplex.songs (id, title, album, artist, tags) " +
"VALUES (" +
"756716f7-2e54-4715-9f00-91dcbea6cf50," +
"'La Petite Tonkinoise'," +
"'Bye Bye Blackbird'," +
"'Joséphine Baker'," +
"{'jazz', '2013'})" +
";");
session.execute(
"INSERT INTO simplex.songs (id, title, album, artist, tags) " +
"VALUES (" +
"f6071e72-48ec-4fcb-bf3e-379c8a696488," +
"'Die Mösch'," +
"'In Gold'," +
"'Willi Ostermann'," +
"{'kölsch', '1996', 'birds'}" +
");");
session.execute(
"INSERT INTO simplex.songs (id, title, album, artist, tags) " +
"VALUES (" +
"fbdf82ed-0063-4796-9c7c-a3d4f47b4b25," +
"'Memo From Turner'," +
"'Performance'," +
"'Mick Jager'," +
"{'soundtrack', '1991'}" +
");");
session.execute(
"INSERT INTO simplex.playlists (id, song_id, title, album, artist) " +
"VALUES (" +
"2cc9ccb7-6221-4ccb-8387-f22b6a1b354d," +
"756716f7-2e54-4715-9f00-91dcbea6cf50," +
"'La Petite Tonkinoise'," +
"'Bye Bye Blackbird'," +
"'Joséphine Baker'" +
");");
session.execute(
"INSERT INTO simplex.playlists (id, song_id, title, album, artist) " +
"VALUES (" +
"2cc9ccb7-6221-4ccb-8387-f22b6a1b354d," +
"f6071e72-48ec-4fcb-bf3e-379c8a696488," +
"'Die Mösch'," +
"'In Gold'," +
"'Willi Ostermann'" +
");");
session.execute(
"INSERT INTO simplex.playlists (id, song_id, title, album, artist) " +
"VALUES (" +
"3fd2bedf-a8c8-455a-a462-0cd3a4353c54," +
"fbdf82ed-0063-4796-9c7c-a3d4f47b4b25," +
"'Memo From Turner'," +
"'Performance'," +
"'Mick Jager'" +
");");
System.out.println("Data loaded.");
}
/**
* Queries the songs and playlists tables for data.
*/
public void querySchema() {
ResultSet results = session.execute(
"SELECT * FROM simplex.playlists " +
"WHERE id = 2cc9ccb7-6221-4ccb-8387-f22b6a1b354d;");
System.out.println(
String.format("%-30s\t%-20s\t%-20s\n%s", "title", "album", "artist",
"-------------+------------------+---------------"));
for (Row row : results) {
System.out.println(
String.format("%-30s\t%-20s\t%-20s",
row.getString("title"),
row.getString("album"),
row.getString("artist")));
}
System.out.println();
}
/**
* Updates the songs table with a new song and then queries the table
* to retrieve data.
*/
public void updateSchema() {
session.execute(
"UPDATE simplex.songs " +
"SET tags = tags + { 'entre-deux-guerres' } " +
"WHERE id = 756716f7-2e54-4715-9f00-91dcbea6cf50;");
ResultSet results = session.execute(
"SELECT * FROM simplex.songs " +
"WHERE id = 756716f7-2e54-4715-9f00-91dcbea6cf50;");
System.out.println(
String.format("%-30s\t%-20s\t%-20s%-30s\n%s",
"title", "album", "artist", "tags",
"--------------------------+-----------------+-----------------+-------"));
for (Row row : results) {
System.out.println(
String.format("%-30s\t%-20s\t%-20s",
row.getString("title"),
row.getString("album"),
row.getString("artist"),
row.getSet("tags", String.class)));
}
}
/**
* Drops the specified schema.
* @param keyspace the keyspace to drop (and all of its data)
*/
public void dropSchema(String keyspace) {
getSession().execute("DROP KEYSPACE " + keyspace);
System.out.println("Finished dropping " + keyspace + " keyspace.");
}
/**
* Returns the current session.
* @return the current session to execute statements on
*/
public Session getSession() {
return this.session;
}
// used by the workaround method in the BoundStatementsclient child class.
void setSession(Session session) {
this.session = session;
}
/**
* Shuts down the session and its cluster.
*/
public void close() {
session.close();
session.getCluster().close();
}
/**
* Creates simple client application that illustrates connecting to
* a Cassandra cluster. retrieving metadata, creating a schema,
* loading data into it, and then querying it.
* @param args ignored
*/
public static void main(String[] args) {
SimpleClient client = new SimpleClient();
client.connect("10.141.5.27");
client.createSchema();
client.loadData();
client.querySchema();
client.updateSchema();
client.dropSchema("simplex");
client.close();
}
}