Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan Indeks Sekunder Global: Java
Anda dapat menggunakan API Dokumen AWS SDK for Java untuk membuat tabel Amazon DynamoDB dengan satu atau beberapa indeks sekunder global, mendeskripsikan indeks pada tabel, dan melakukan kueri menggunakan indeks.
Berikut ini adalah langkah-langkah umum untuk operasi tabel.
-
Buat instans kelas
DynamoDB
. -
Berikan parameter wajib dan opsional untuk operasi dengan membuat objek permintaan yang sesuai.
-
Panggil metode sesuai yang ditentukan oleh klien yang Anda buat pada langkah sebelumnya.
Topik
Membuat tabel dengan Indeks Sekunder Global
Anda dapat membuat indeks sekunder global pada saat membuat tabel. Untuk melakukannya, gunakan CreateTable
dan berikan spesifikasi Anda untuk satu atau beberapa indeks sekunder global. Contoh kode Java berikut membuat tabel untuk menyimpan informasi tentang data cuaca. Kunci partisinya adalah Location
dan kunci urutannya adalah Date
. Indeks sekunder global bernama PrecipIndex
memungkinkan akses cepat ke data curah hujan untuk berbagai lokasi.
Berikut adalah langkah-langkah untuk membuat tabel dengan indeks sekunder global, menggunakan API dokumen DynamoDB.
-
Buat instans kelas
DynamoDB
. -
Buat instans kelas
CreateTableRequest
untuk memberikan informasi permintaan.Anda harus memberikan nama tabel, kunci primernya, dan nilai throughput yang ditentukan. Untuk indeks sekunder global, Anda harus memberikan nama indeks, pengaturan throughput yang ditentukan, definisi atribut untuk kunci urutan indeks, skema kunci untuk indeks, dan proyeksi atribut.
-
Panggil metode
createTable
dengan menentukan objek permintaan sebagai parameter.
Contoh kode Java berikut mendemonstrasikan langkah sebelumnya. Kode tersebut membuat tabel (WeatherData
) dengan indeks sekunder global (PrecipIndex
). Kunci partisi indeksnya adalah Date
dan kunci urutannya adalah Precipitation
. Semua atribut tabel diproyeksikan ke dalam indeks. Pengguna dapat mengkueri indeks ini untuk mendapatkan data cuaca untuk tanggal tertentu, yang secara opsional mengurutkan data berdasarkan jumlah curah hujan.
Karena Precipitation
bukan atribut kunci untuk tabel tersebut, maka tidak diperlukan. Namun, item WeatherData
tanpa Precipitation
tidak muncul di PrecipIndex
.
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); // Attribute definitions ArrayList<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>(); attributeDefinitions.add(new AttributeDefinition() .withAttributeName("Location") .withAttributeType("S")); attributeDefinitions.add(new AttributeDefinition() .withAttributeName("Date") .withAttributeType("S")); attributeDefinitions.add(new AttributeDefinition() .withAttributeName("Precipitation") .withAttributeType("N")); // Table key schema ArrayList<KeySchemaElement> tableKeySchema = new ArrayList<KeySchemaElement>(); tableKeySchema.add(new KeySchemaElement() .withAttributeName("Location") .withKeyType(KeyType.HASH)); //Partition key tableKeySchema.add(new KeySchemaElement() .withAttributeName("Date") .withKeyType(KeyType.RANGE)); //Sort key // PrecipIndex GlobalSecondaryIndex precipIndex = new GlobalSecondaryIndex() .withIndexName("PrecipIndex") .withProvisionedThroughput(new ProvisionedThroughput() .withReadCapacityUnits((long) 10) .withWriteCapacityUnits((long) 1)) .withProjection(new Projection().withProjectionType(ProjectionType.ALL)); ArrayList<KeySchemaElement> indexKeySchema = new ArrayList<KeySchemaElement>(); indexKeySchema.add(new KeySchemaElement() .withAttributeName("Date") .withKeyType(KeyType.HASH)); //Partition key indexKeySchema.add(new KeySchemaElement() .withAttributeName("Precipitation") .withKeyType(KeyType.RANGE)); //Sort key precipIndex.setKeySchema(indexKeySchema); CreateTableRequest createTableRequest = new CreateTableRequest() .withTableName("WeatherData") .withProvisionedThroughput(new ProvisionedThroughput() .withReadCapacityUnits((long) 5) .withWriteCapacityUnits((long) 1)) .withAttributeDefinitions(attributeDefinitions) .withKeySchema(tableKeySchema) .withGlobalSecondaryIndexes(precipIndex); Table table = dynamoDB.createTable(createTableRequest); System.out.println(table.getDescription());
Anda harus menunggu hingga DynamoDB membuat tabel dan menetapkan status tabel menjadi ACTIVE
. Setelah itu, Anda bisa mulai memasukkan item data ke dalam tabel.
Mendeskripsikan tabel dengan Indeks Sekunder Global
Untuk mendapatkan informasi tentang indeks sekunder global pada sebuah tabel, gunakan DescribeTable
. Untuk setiap indeks, Anda dapat mengakses namanya, skema kunci, dan atribut yang diproyeksikan.
Berikut ini adalah langkah-langkah untuk mengakses informasi indeks sekunder global sebuah tabel.
-
Buat instans kelas
DynamoDB
. -
Buat instans kelas
Table
untuk mewakili indeks yang ingin Anda gunakan. -
Panggil metode
describe
pada objekTable
.
Contoh kode Java berikut mendemonstrasikan langkah sebelumnya.
contoh
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); Table table = dynamoDB.getTable("WeatherData"); TableDescription tableDesc = table.describe(); Iterator<GlobalSecondaryIndexDescription> gsiIter = tableDesc.getGlobalSecondaryIndexes().iterator(); while (gsiIter.hasNext()) { GlobalSecondaryIndexDescription gsiDesc = gsiIter.next(); System.out.println("Info for index " + gsiDesc.getIndexName() + ":"); Iterator<KeySchemaElement> kseIter = gsiDesc.getKeySchema().iterator(); while (kseIter.hasNext()) { KeySchemaElement kse = kseIter.next(); System.out.printf("\t%s: %s\n", kse.getAttributeName(), kse.getKeyType()); } Projection projection = gsiDesc.getProjection(); System.out.println("\tThe projection type is: " + projection.getProjectionType()); if (projection.getProjectionType().toString().equals("INCLUDE")) { System.out.println("\t\tThe non-key projected attributes are: " + projection.getNonKeyAttributes()); } }
Mengkueri Indeks Sekunder Global
Anda dapat menggunakan Query
pada indeks sekunder global, sama seperti Anda Query
tabel. Anda perlu menentukan nama indeks, kriteria kueri untuk kunci partisi indeks dan kunci urutan (jika ada), dan atribut yang ingin Anda kembalikan. Dalam contoh ini, indeksnya adalah PrecipIndex
, yang memiliki kunci partisi Date
dan kunci urutan Precipitation
. Kueri indeks mengembalikan semua data cuaca untuk tanggal tertentu, dengan curah hujan lebih besar dari nol.
Berikut ini adalah langkah-langkah untuk mengkueri indeks sekunder global menggunakan API Dokumen AWS SDK for Java.
-
Buat instans kelas
DynamoDB
. -
Buat instans kelas
Table
untuk mewakili indeks yang ingin Anda gunakan. -
Buat instans kelas
Index
untuk indeks yang ingin Anda kueri. -
Panggil metode
query
pada objekIndex
.
Nama atribut Date
adalah kata yang disimpan DynamoDB. Oleh karena itu, Anda harus menggunakan nama atribut ekspresi sebagai placeholder di KeyConditionExpression
.
Contoh kode Java berikut mendemonstrasikan langkah sebelumnya.
contoh
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); Table table = dynamoDB.getTable("WeatherData"); Index index = table.getIndex("PrecipIndex"); QuerySpec spec = new QuerySpec() .withKeyConditionExpression("#d = :v_date and Precipitation = :v_precip") .withNameMap(new NameMap() .with("#d", "Date")) .withValueMap(new ValueMap() .withString(":v_date","2013-08-10") .withNumber(":v_precip",0)); ItemCollection<QueryOutcome> items = index.query(spec); Iterator<Item> iter = items.iterator(); while (iter.hasNext()) { System.out.println(iter.next().toJSONPretty()); }