🌓

CosmosDB 在 Java 项目中的运用

Created
Dec 28, 2021 8:04 AM

Azure 中的选择

最近项目里需要用到 CosmosDB 来存储一些数据,CosmosDB 貌似是 Azure 对于 MongoDB 二次开发的东西,所以为了以后别人用着方便,在创建 Azure 资源的时候果断选择了 MongoDB API 的版本。

image

MongoDB 快速上手

非关系型数据库之前只用过 Redis,所以这个 MongoDB 还不是很了解。我上手一般直接看视频,感觉比较快,我是看的下面这个。看了这个就会链接、创建、操作数据库等基本操作了。

需要注意的是,我这边用的是传统的 MongoDB 的 Java driver,也就是下面这个东西

他还有一个 Springboot 用的一个,不过我看语法跟原版差挺多的,而且原版也符合业务需求,我就没用了。

Connection 的配置

连接信息

这个不用多说,直接配置在 application properties 里就行

MongoClient

实际开发中肯定要不停调用 new 出来的 MongoClient,所以需要把它单独放在一个 class 里,大概就是这样

image

Shared Collection

Azure 他这个默认的 Collection 只能存储 20G 的数据,实际生产中可能不够用,一般都是创建这个 Shared Collection。

image

他这个 Shared Collection 好像是 Azure 自己做的切片分布式存储,所以不限制空间,具体不是很懂…

想要在 Java 中创建一个这样带 Shard key 的 collection,需要执行 documents 创建 collection。这边提供一个方法

private static MongoCollection<Document> createCollection(MongoDatabase leaseDb, String collectionName) {
    Document doc = new Document();
    doc.append("customAction", "CreateCollection");
    doc.append("collection", collectionName);
    doc.append("shardKey", "");
    Document result = leaseDb.runCommand(doc);
    System.out.println(result.toJson());
    return leaseDb.getCollection(collectionName);
}

用的时候把 shardKey 那边的参数填上就行,调用就像这样

database = mongoclient.getDatabase("");
collection = createCollection(database, collectionName);

唯一键的索引

实际开发中可能需要指定不重复的 key 或是创建索引,对着上面的 collection 进行类似如下的操作即可

Document index = new Document("xxx", 1);
ollection.createIndex(index,new IndexOptions().unique(true));