Globale aktive Tabelle mit APIs erstellen
Mit dem NoSQL-Java-SDK können Sie eine globale aktive Tabelle in NDCS erstellen
Mit der Java-API-Klasse (AddReplicaRequest) führen Sie die DDL-Anweisung aus, um eine Global Active-Tabelle zu erstellen.
So erstellen Sie eine globale aktive Tabelle:
-
Singleton-Tabelle erstellen
-
Sperren Sie das Schema der Tabelle. Sie können die Tabelle beim Erstellen fixieren, indem Sie mit eingefrorenem Schema in der Anweisung CREATE TABLE hinzufügen. Wenn die Tabelle keine JSON-Spalten enthält, können Sie das Schema einfrieren, indem Sie mit erzwungener Schemaeinfrierung in der CREATE TABLE-Anweisung hinzufügen.
-
Eine NoSQL-Datenbanktabelle wird erst dann zu einer Global Active-Tabelle, wenn eine regionale Replikattabelle hinzugefügt wurde. Die regionale Replikattabelle wird in einer anderen Region erstellt.
Betrachten Sie die folgenden Beispiele:
-
Im Beispiel für eine Tabelle mit JSON-Spalten wird das Schema eingefroren, indem mit eingefrorenem Schema in die CREATE TABLE-Anweisung eingefügt wird.
-
Im Beispiel für eine Tabelle ohne JSON-Spalten wird das Schema eingefroren, indem mit erzwungener Schemaeinfrierung in die CREATE TABLE-Anweisung eingefügt wird. Wir haben auch den TTL- oder Time-to-Live-Wert in der CREATE TABLE-Anweisung angegeben, da die Zeilen dieser Tabelle in drei Tagen ablaufen sollen.
/* Initialize NoSQLHandle */
NoSQLHandleConfig config = new NoSQLHandleConfig(endpoint)
.setAuthorizationProvider(new SignatureProvider())
.setDefaultCompartment(compartmentId);
NoSQLHandle handle = NoSQLHandleFactory.createNoSQLHandle(config);
/* Create table */
String ddl = "CREATE TABLE IF NOT EXISTS " + tableName + "(" +
"id INTEGER, name STRING, info JSON, PRIMARY KEY(id)) " +
"with schema frozen";
String tableName = "<name_your_table";
String region = "<name_your_sender_region>";
System.output.println("Creating table: " + ddl);
TableRequest tableReq = new TableRequest()
.setStatement(ddl)
.setTableLimits(new TableLimits(50, 50, 1));
TableResult res = handle.tableRequest(tableReq);
res.waitForCompletion(handle, 90000, 1000);
System.output.println("Table created: " + tableName);
/* add replica ca-montreal-1 */
System.output.println("\nAdding replica: " + region);
AddReplicaRequest addRepReq = new AddReplicaRequest()
.setTableName(tableName)
.setReplicaName(region);
res = handle.addReplica(addRepReq);
res.waitForCompletion(handle, 90000, 1000);
System.output.println("Added replica: " + region);
/* Initialize NoSQLHandle */
NoSQLHandleConfig config = new NoSQLHandleConfig(endpoint)
.setAuthorizationProvider(new SignatureProvider())
.setDefaultCompartment(compartmentId);
NoSQLHandle handle = NoSQLHandleFactory.createNoSQLHandle(config);
/* Create table */
String ddl = "CREATE TABLE IF NOT EXISTS " + tableName + "(" +
"id INTEGER, name STRING, PRIMARY KEY(id)) " +
"with schema frozen force USING TTL 3 days";
String tableName = "<name_your_table";
String region = "<name_your_sender_region>";
System.output.println("Creating table: " + ddl);
TableRequest tableReq = new TableRequest()
.setStatement(ddl)
.setTableLimits(new TableLimits(50, 50, 1));
TableResult res = handle.tableRequest(tableReq);
res.waitForCompletion(handle, 90000, 1000);
System.output.println("Table created: " + tableName);
/* add replica ca-montreal-1 */
System.output.println("\nAdding replica: " + region);
AddReplicaRequest addRepReq = new AddReplicaRequest()
.setTableName(tableName)
.setReplicaName(region);
res = handle.addReplica(addRepReq);
res.waitForCompletion(handle, 90000, 1000);
System.output.println("Added replica: " + region);
Untergeordnete Tabelle erstellen:
Verwenden Sie die Klasse TableRequest, um eine untergeordnete Tabelle zu erstellen. Um die untergeordnete Tabelle zu einer Global Active-Tabelle zu machen, müssen Sie außerdem das Schema der untergeordneten Tabelle einfrieren und ein regionales Replikat hinzufügen. Sie können aus einem der regionalen Replikate der übergeordneten Tabelle wählen.
/* Initialize NoSQLHandle */
NoSQLHandleConfig config = new NoSQLHandleConfig(endpoint)
.setAuthorizationProvider(new SignatureProvider())
.setDefaultCompartment(compartmentId);
NoSQLHandle handle = NoSQLHandleFactory.createNoSQLHandle(config);
/* Create table */
String ddl = "CREATE TABLE IF NOT EXISTS " + fulltableName + "(" +
"cid INTEGER, cname STRING, cinfo JSON, PRIMARY KEY(id)) " +
"with schema frozen";
System.output.println("Creating child table: " + ddl);
TableRequest tableReq = new TableRequest()
.setStatement(ddl));
TableResult res = handle.tableRequest(tableReq);
res.waitForCompletion(handle, 90000, 1000);
System.output.println("Child Table created: " + tableName);
/* add replica ca-montreal-1 */
System.output.println("\nAdding replica: " + region);
AddReplicaRequest addRepReq = new AddReplicaRequest()
.setTableName(fulltableName)
.setReplicaName(region);
res = handle.addReplica(addRepReq);
res.waitForCompletion(handle, 90000, 1000);
System.output.println("Added replica: " + region);