1、优势
1)吞吐量和 存储可弹性缩放
2)低延迟
3)多模型,多API
4)无需架构和索引管理
5)静态和动态加密
2、使用
2.1、查询数据
select * from c where c.id = ‘’
2.2、 使用同步(Sync)API管理数据库资源
1)CosmosClient初始化.
client = new CosmosClientBuilder()
.endpoint(AccountSettings.HOST)
.key(AccountSettings.MASTER_KEY)
// Setting the preferred location to Cosmos DB Account region
// West US is just an example. User should set preferred location to the Cosmos DB region closest to the application
.preferredRegions(Collections.singletonList("China East 2"))
.consistencyLevel(ConsistencyLevel.EVENTUAL)
.buildClient();
2)CosmosDatabase的创建
// Create database if not exists
//
CosmosDatabaseResponse cosmosDatabaseResponse = client.createDatabaseIfNotExists(databaseName);
database = client.getDatabase(cosmosDatabaseResponse.getProperties().getId());
3)CosmosContainer的创建
// Create container if not exists
//
CosmosContainerProperties containerProperties =
new CosmosContainerProperties(containerName, "/lastName");
// Create container with 400 RU/s
CosmosContainerResponse cosmosContainerResponse =
database.createContainerIfNotExists(containerProperties, ThroughputProperties.createManualThroughput(400));
container = database.getContainer(cosmosContainerResponse.getProperties().getId());
4)使用createItem方法创建项
// Create item using container that we created using sync client
// Use lastName as partitionKey for cosmos item
// Using appropriate partition key improves the performance of database operations
CosmosItemRequestOptions cosmosItemRequestOptions = new CosmosItemRequestOptions();
CosmosItemResponse<Family> item = container.createItem(family, new PartitionKey(family.getLastName()), cosmosItemRequestOptions);
5、使用queryItems方法对JSON执行SQL查询
// Set some common query options
CosmosQueryRequestOptions queryOptions = new CosmosQueryRequestOptions();
//queryOptions.setEnableCrossPartitionQuery(true); //No longer necessary in SDK v4
// Set query metrics enabled to get metrics around query executions
queryOptions.setQueryMetricsEnabled(true);
CosmosPagedIterable<Family> familiesPagedIterable = container.queryItems(
"SELECT * FROM Family WHERE Family.lastName IN ('Andersen', 'Wakefield', 'Johnson')", queryOptions, Family.class);
familiesPagedIterable.iterableByPage(10).forEach(cosmosItemPropertiesFeedResponse -> {
logger.info("Got a page of query result with {} items(s) and request charge of {}",
cosmosItemPropertiesFeedResponse.getResults().size(), cosmosItemPropertiesFeedResponse.getRequestCharge());
logger.info("Item Ids {}", cosmosItemPropertiesFeedResponse
.getResults()
.stream()
.map(Family::getId)
.collect(Collectors.toList()));
});
7)使用readItem方法执行点读取
familiesToCreate.forEach(family -> {
//
try {
CosmosItemResponse<Family> item = container.readItem(family.getId(), new PartitionKey(family.getLastName()), Family.class);
double requestCharge = item.getRequestCharge();
Duration requestLatency = item.getDuration();
logger.info("Item successfully read with id {} with a charge of {} and within duration {}",
item.getItem().getId(), requestCharge, requestLatency);
} catch (CosmosException e) {
logger.error("Read Item failed with", e);
}