日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

亚马逊DynamoDB

發(fā)布時(shí)間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 亚马逊DynamoDB 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

介紹

  • Amazon DynamoDB是一項(xiàng)完全托管的NoSQL數(shù)據(jù)庫(kù)服務(wù),可提供無(wú)縫的可擴(kuò)展性和快速可預(yù)測(cè)的性能。
  • Amazon DynamoDB自動(dòng)將表的數(shù)據(jù)和流量分布在足夠數(shù)量的服務(wù)器上,以處理客戶指定的請(qǐng)求容量和存儲(chǔ)的數(shù)據(jù)量,同時(shí)保持一致且快速的性能。
  • 所有數(shù)據(jù)項(xiàng)都存儲(chǔ)在固態(tài)磁盤(SSD)上,并自動(dòng)跨區(qū)域中的多個(gè)可用區(qū)復(fù)制,以提供內(nèi)置的高可用性和數(shù)據(jù)持久性。
  • 您可以通過(guò)AWS管理控制臺(tái)啟動(dòng)新的Amazon DynamoDB數(shù)據(jù)庫(kù)表,在不停機(jī)或性能下降的情況下擴(kuò)展或縮減對(duì)該表的請(qǐng)求容量,并獲得對(duì)資源利用率和性能指標(biāo)的可見(jiàn)性。
  • 借助Amazon DynamoDB,您可以將操作和擴(kuò)展分布式數(shù)據(jù)庫(kù)的管理負(fù)擔(dān)轉(zhuǎn)移到AWS,因此您不必?fù)?dān)心硬件設(shè)置,設(shè)置和配置,復(fù)制,軟件修補(bǔ)或集群擴(kuò)展。
  • SDK: http : //aws.amazon.com/sdkforjava/

Amazon DynamoDB注釋

  • @DynamoDBTable

標(biāo)識(shí)Amazon DynamoDB中的目標(biāo)表。 例如,以下Java代碼段定義了一個(gè)類Developer,并將其映射到Amazon DynamoDB中的People表。

@DynamoDBTable(tableName="People") public class Developer { ...}
  • @DynamoDBIgnore

向DynamoDBMapper實(shí)例指示應(yīng)該忽略關(guān)聯(lián)的屬性。 將數(shù)據(jù)保存到表時(shí),DynamoDBMapper不會(huì)將此屬性保存到表中。

  • @DynamoDBAttribute

將屬性映射到表屬性。 默認(rèn)情況下,每個(gè)類屬性都映射到具有相同名稱的item屬性。 但是,如果名稱不同,則可以使用此標(biāo)記將屬性映射到屬性。 在以下Java代碼段中,DynamoDBAttribute將BookAuthors屬性映射到表中的Authors屬性名稱。

@DynamoDBAttribute(attributeName = "Authors") public List<String> getBookAuthors() { return BookAuthors; } public void setBookAuthors(List<String> BookAuthors) { this.BookAuthors = BookAuthors; }

將對(duì)象保存到表時(shí),DynamoDBMapper使用作者作為屬性名稱。

  • @DynamoDBHashKey

將類屬性映射到表的hash屬性。 該屬性必須是受支持的String或Numeric類型之一,并且不能是集合類型。

假設(shè)您有一個(gè)表ProductCatalog,該表具有ID作為主鍵。 以下Java代碼段定義了CatalogItem類,并使用@DynamoDBHashKey標(biāo)記將其id屬性映射到ProductCatalog表的主鍵。

@DynamoDBTable(tableName="ProductCatalog") public class CatalogItem {private String Id; @DynamoDBHashKey(attributeName="Id")public String getId() {return Id;}public void setId(String Id) {this.Id = Id;}// Additional properties go here. }
  • @DynamoDBRangeKey

將類屬性映射到表的范圍鍵屬性。 如果主鍵是由哈希鍵和范圍鍵屬性組成的,則可以使用此標(biāo)記將您的類字段映射到范圍屬性。 例如,假定您有一個(gè)“回復(fù)”表,其中存儲(chǔ)有論壇主題的回復(fù)。 每個(gè)線程可以有很多回復(fù)。 因此,該表的主鍵是ThreadId和ReplyDateTime。 ThreadId是哈希屬性,ReplyDateTime是范圍屬性。 以下Java代碼段定義了Reply類,并將其映射到Reply表。 它同時(shí)使用@DynamoDBHashKey和@DynamoDBRangeKeytags來(lái)標(biāo)識(shí)映射到主鍵的類屬性。

@DynamoDBTable(tableName="Reply") public class Reply {private String id;private String replyDateTime;@DynamoDBHashKey(attributeName="Id")public String getId() { return id; }public void setId(String id) { this.id = id; }@DynamoDBRangeKey(attributeName="ReplyDateTime")public String getReplyDateTime() { return replyDateTime; }public void setReplyDateTime(String replyDateTime) { this.replyDateTime = replyDateTime; }// Additional properties go here. }
  • @DynamoDBAutoGeneratedKey

將哈希鍵或范圍鍵屬性標(biāo)記為自動(dòng)生成。 保存這些屬性時(shí),對(duì)象持久性模型將生成一個(gè)隨機(jī)UUID。 只能將字符串屬性標(biāo)記為自動(dòng)生成的鍵。

以下代碼段演示了如何使用自動(dòng)生成的密鑰。

@DynamoDBTable(tableName="AutoGeneratedKeysExample") public class AutoGeneratedKeys {private String id;private String payload;@DynamoDBHashKey(attributeName = "Id")@DynamoDBAutoGeneratedKeypublic String getId() { return id; }public void setId(String id) { this.id = id; }@DynamoDBAttribute(attributeName="payload")public String getPayload() { return this.payload };public String setPayload(String payload) { this.payload = payload }; public static void saveItem() {AutoGeneratedKeys obj = new AutoGeneratedKeys();obj.setPayload("abc123");// id field is null at this point DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient);mapper.save(obj);System.out.println("Object was saved with id " + obj.getId());} }
  • @DynamoDBVersionAttribute

標(biāo)識(shí)用于存儲(chǔ)樂(lè)觀鎖定版本號(hào)的類屬性。 DynamoDBMapper保存新項(xiàng)目時(shí),會(huì)為此屬性分配一個(gè)版本號(hào),并在每次更新該項(xiàng)目時(shí)將其遞增。 僅支持?jǐn)?shù)字標(biāo)量類型。

DynamoDBMapper類別

DynamoDBMapper類是Amazon DynamoDB的入口點(diǎn)。 它提供了與Amazon DynamoDB的連接,并使您能夠訪問(wèn)各種表中的數(shù)據(jù),對(duì)項(xiàng)目執(zhí)行各種CRUD操作以及對(duì)表執(zhí)行查詢和掃描。 此類提供以下關(guān)鍵操作,供您使用Amazon DynamoDB。

    • 將指定的對(duì)象保存到表中。
mapper.save(obj, new DynamoDBMapperConfig(DynamoDBMapperConfig.SaveBehavior.CLOBBER));
  • 加載
    • 從表中檢索項(xiàng)目。
CatalogItem item = mapper.load(CatalogItem.class, item.getId(),new DynamoDBMapperConfig(DynamoDBMapperConfig.ConsistentReads.CONSISTENT));
  • 刪除
    • 從表中刪除一個(gè)項(xiàng)目。
  • 詢問(wèn)
    • 啟用表查詢。
String forumName = "Amazon DynamoDB"; String forumSubject = "DynamoDB Thread 1"; String hashKey = forumName + "#" + forumSubject;long twoWeeksAgoMilli = (new Date()).getTime() - (14L*24L*60L*60L*1000L); Date twoWeeksAgo = new Date(); twoWeeksAgo.setTime(twoWeeksAgoMilli); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); String twoWeeksAgoStr = df.format(twoWeeksAgo);Condition rangeKeyCondition = new Condition() .withComparisonOperator(ComparisonOperator.GT.toString()) .withAttributeValueList(new AttributeValue().withS(twoWeeksAgoStr.toString()));Reply replyKey = new Reply(); replyKey.setId(hashKey);DynamoDBQueryExpression<Reply> queryExpression = new DynamoDBQueryExpression<Reply>() .withHashKeyValues(replyKey) .withRangeKeyCondition("ReplyDateTime", rangeKeyCondition);List<Reply> latestReplies = mapper.query(Reply.class, queryExpression);

該查詢返回Reply對(duì)象的集合。

  • 掃描
    • 掃描整個(gè)表。
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();Map<String, Condition> scanFilter = new HashMap<String, Condition>(); Condition scanCondition = new Condition() .withComparisonOperator(ComparisonOperator.EQ.toString()) .withAttributeValueList(new AttributeValue().withN("0"));scanFilter.put("Answered", scanCondition);scanExpression.setScanFilter(scanFilter);List<Thread> unansweredThreads = mapper.scan(Thread.class, scanExpression);
  • 掃描方法返回“延遲加載”集合。 它最初僅返回一頁(yè)結(jié)果,然后在需要時(shí)對(duì)下一頁(yè)進(jìn)行服務(wù)調(diào)用。 要獲取所有匹配項(xiàng),您僅需要遍歷unansweredThreads集合。
  • batchDelete
    • 使用對(duì)AmazonDynamoDB.batchWriteItem方法的一個(gè)或多個(gè)調(diào)用從一個(gè)或多個(gè)表中刪除對(duì)象。
Book book1 = mapper.load(Book.class, 901); Book book2 = mapper.load(Book.class, 902); mapper.batchDelete(Arrays.asList(book1, book2));
  • batchSave
    • 使用對(duì)AmazonDynamoDB.batchWriteItem方法的一個(gè)或多個(gè)調(diào)用將對(duì)象保存到一個(gè)或多個(gè)表。
Book book1 = new Book(); book1.id = 901; book1.productCategory = "Book"; book1.title = "Book 901 Title";Book book2 = new Book(); book2.id = 902; book2.productCategory = "Book"; book2.title = "Book 902 Title";mapper.batchSave(Arrays.asList(book1, book2));
  • batchWrite
    • 使用對(duì)AmazonDynamoDB.batchWriteItem方法的一個(gè)或多個(gè)調(diào)用,將對(duì)象保存到一個(gè)或多個(gè)表并從一個(gè)或多個(gè)表中刪除對(duì)象。
// Create a Forum item to save Forum forumItem = new Forum(); forumItem.name = "Test BatchWrite Forum";// Create a Thread item to save Thread threadItem = new Thread(); threadItem.forumName = "AmazonDynamoDB"; threadItem.subject = "My sample question";// Load a ProductCatalog item to delete Book book3 = mapper.load(Book.class, 903);List<Object> objectsToWrite = Arrays.asList(forumItem, threadItem); List<Book> objectsToDelete = Arrays.asList(book3);mapper.batchWrite(objectsToWrite, objectsToDelete);
  • 計(jì)數(shù)
    • 計(jì)算指定的掃描表達(dá)式并返回匹配項(xiàng)的計(jì)數(shù)。
  • marshallIntoObject
    • 一種將結(jié)果從低級(jí)API轉(zhuǎn)換為域?qū)ο蟮膶?shí)用程序方法。

支持的數(shù)據(jù)類型

Amazon DynamoDB支持以下原始數(shù)據(jù)類型和原始包裝器類。

  • 布爾,布爾
  • 字節(jié),字節(jié)
  • 日期(作為ISO8601毫秒精度的字符串,轉(zhuǎn)換為UTC)
  • 日歷(作為ISO8601毫秒精度的字符串,已轉(zhuǎn)換為UTC)
  • 好久好久
  • 整數(shù),整數(shù)
  • 雙倍
  • 浮,浮
  • 大十進(jìn)制
  • 大整數(shù)

Amazon DynamoDB支持Java Set集合類型。 如果映射的集合屬性不是Set,則將引發(fā)異常。

下表總結(jié)了前面的Java類型如何映射到Amazon DynamoDB類型。

Java類型 Amazon DynamoDB類型
所有數(shù)字類型 N(數(shù)字類型)
弦樂(lè) S(字符串類型)
布爾值 N(數(shù)字類型),0或1。
字節(jié)緩沖區(qū) B(二進(jìn)制類型)
日期 S(字符串類型)。 日期值存儲(chǔ)為ISO-8601格式的字符串。
設(shè)置收集類型 SS(字符串集)類型,NS(數(shù)字集)類型或BS(二進(jìn)制集)類型。

Java示例:CRUD操作

CatalogItem.java

import java.util.Set; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; @DynamoDBTable(tableName="ProductCatalog") public class CatalogItem {private Integer id;private String title;private String ISBN;private Set bookAuthors;@DynamoDBHashKey(attributeName="Id")public Integer getId() { return id; }public void setId(Integer id) { this.id = id; }@DynamoDBAttribute(attributeName="Title")public String getTitle() { return title; } public void setTitle(String title) { this.title = title; }@DynamoDBAttribute(attributeName="ISBN")public String getISBN() { return ISBN; } public void setISBN(String ISBN) { this.ISBN = ISBN;}@DynamoDBAttribute(attributeName = "Authors")public Set getBookAuthors() { return bookAuthors; } public void setBookAuthors(Set bookAuthors) { this.bookAuthors = bookAuthors; }@Overridepublic String toString() {return "Book [ISBN=" + ISBN + ", bookAuthors=" + bookAuthors+ ", id=" + id + ", title=" + title + "]"; } }

ObjectPersistenceCRUDExample.java

import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Random;import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; import com.amazonaws.services.dynamodbv2.model.AttributeDefinition; import com.amazonaws.services.dynamodbv2.model.AttributeValue; import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; import com.amazonaws.services.dynamodbv2.model.Condition; import com.amazonaws.services.dynamodbv2.model.CreateTableRequest; import com.amazonaws.services.dynamodbv2.model.DescribeTableRequest; import com.amazonaws.services.dynamodbv2.model.KeySchemaElement; import com.amazonaws.services.dynamodbv2.model.KeyType; import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput; import com.amazonaws.services.dynamodbv2.model.ScalarAttributeType; import com.amazonaws.services.dynamodbv2.model.ScanRequest; import com.amazonaws.services.dynamodbv2.model.ScanResult; import com.amazonaws.services.dynamodbv2.model.TableDescription; import com.amazonaws.services.dynamodbv2.model.TableStatus;public class ObjectPersistenceCRUDExample {static AmazonDynamoDBClient client;private DynamoDBMapper mapper;private static int PRODUCT_ID;public static void main(String[] args) throws IOException {ObjectPersistenceCRUDExample demo = new ObjectPersistenceCRUDExample();demo.init();demo.createTable("ProductCatalog");for (int i = 0; i < 100; i++) {System.out.println(i);PRODUCT_ID = PRODUCT_ID + i;demo.insert();}demo.getAllRows();CatalogItem itemRetrieved = demo.load(PRODUCT_ID);demo.update(itemRetrieved);CatalogItem updatedItem = demo.load(PRODUCT_ID);demo.delete(updatedItem);demo.load(updatedItem.getId());System.out.println("Example complete!");}private void init() {PRODUCT_ID = new Random().nextInt(1000);AWSCredentials credentials = new ClasspathPropertiesFileCredentialsProvider().getCredentials();client = new AmazonDynamoDBClient(credentials);Region usWest2 = Region.getRegion(Regions.US_WEST_2);client.setRegion(usWest2);mapper = new DynamoDBMapper(client);}private void createTable(String tableName) {try {CreateTableRequest createTableRequest = new CreateTableRequest().withTableName(tableName);createTableRequest.withKeySchema(new KeySchemaElement().withAttributeName("Id").withKeyType(KeyType.HASH));createTableRequest.withAttributeDefinitions(new AttributeDefinition().withAttributeName("Id").withAttributeType(ScalarAttributeType.N));createTableRequest.withProvisionedThroughput(new ProvisionedThroughput().withReadCapacityUnits(10L).withWriteCapacityUnits(10L));TableDescription createdTableDescription = client.createTable(createTableRequest).getTableDescription();System.out.println("Created Table: " + createdTableDescription);// Wait for it to become activewaitForTableToBecomeAvailable(tableName);} catch (AmazonServiceException e) {e.printStackTrace();} catch (AmazonClientException e) {e.printStackTrace();}}private void waitForTableToBecomeAvailable(String tableName) {System.out.println("Waiting for " + tableName + " to become ACTIVE...");long startTime = System.currentTimeMillis();long endTime = startTime + (10 * 60 * 1000);while (System.currentTimeMillis() < endTime) {try {Thread.sleep(1000 * 20);} catch (Exception e) {}try {DescribeTableRequest request = new DescribeTableRequest().withTableName(tableName);TableDescription tableDescription = client.describeTable(request).getTable();String tableStatus = tableDescription.getTableStatus();System.out.println(" - current state: " + tableStatus);if (tableStatus.equals(TableStatus.ACTIVE.toString()))return;} catch (AmazonServiceException ase) {if (ase.getErrorCode().equalsIgnoreCase("ResourceNotFoundException") == false)throw ase;}}throw new RuntimeException("Table " + tableName + " never went active");}private void insert() {CatalogItem item = new CatalogItem();item.setId(PRODUCT_ID);item.setTitle("Book PRODUCT_ID");item.setISBN("611-1111111111");item.setBookAuthors(new HashSet(Arrays.asList("Author1","Author2")));// Save the item (book).mapper.save(item);}private void update(CatalogItem itemRetrieved) {itemRetrieved.setISBN("622-2222222222");itemRetrieved.setBookAuthors(new HashSet(Arrays.asList("Author1", "Author3")));mapper.save(itemRetrieved);System.out.println("Item updated:");System.out.println(itemRetrieved);}private void delete(CatalogItem updatedItem) {// Delete the item.mapper.delete(updatedItem);}private CatalogItem load(int id) {// Retrieve the updated item.DynamoDBMapperConfig config = new DynamoDBMapperConfig(DynamoDBMapperConfig.ConsistentReads.CONSISTENT);CatalogItem updatedItem = mapper.load(CatalogItem.class, id, config);if (updatedItem == null) {System.out.println("Done - Sample item is deleted.");} else {System.out.println("Retrieved item:");System.out.println(updatedItem);}return updatedItem;}private void getAllRows() {ScanRequest scanRequest = new ScanRequest().withTableName("ProductCatalog");scanRequest.setLimit(10);HashMap scanFilter = new HashMap();Condition condition = new Condition().withComparisonOperator(ComparisonOperator.EQ.toString()).withAttributeValueList(new AttributeValue().withS("611-1111111111"));scanFilter.put("ISBN", condition);Condition condition2 = new Condition().withComparisonOperator(ComparisonOperator.LE.toString()).withAttributeValueList(new AttributeValue().withN("1000"));scanFilter.put("Id", condition2);scanRequest.withScanFilter(scanFilter);try {System.out.println("Scan Request: " + scanRequest);ScanResult scanResponse = client.scan(scanRequest);for (Map item : scanResponse.getItems()) {System.out.println(item.get("Id").getN() + " , " +item.get("ISBN").getS() + " , " +item.get("Authors").getSS() + " , " +item.get("Title").getS());}System.out.println("Scan Response: " + scanResponse);System.out.println("Count: " + scanResponse.getCount());System.out.println("Scanned Count: "+ scanResponse.getScannedCount());System.out.println("Items: " + scanResponse.getItems());} catch (AmazonServiceException e) {e.printStackTrace();} catch (AmazonClientException e) {e.printStackTrace();}} }

參考: Sunil Gulabani博客上的JCG合作伙伴 Sunil Gulabani的Amazon DynamoDB 。

翻譯自: https://www.javacodegeeks.com/2013/08/amazon-dynamodb.html

總結(jié)

以上是生活随笔為你收集整理的亚马逊DynamoDB的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。