document.write('
')
菜单导航
首页 >  国际教育 >  正文

Spring认证中国教育管理中心

时间:2021-11-25 18:07:19 来源: 丹江口市第一中学 作者: 赵有强 阅读:180

MongoDB 5.0 引入了时间序列集合,这些集合经过优化,可以随着时间的推移有效地存储文档,例如测量值或事件。在插入任何数据之前,需要创建这些集合。可以通过运行createCollection命令、定义时间序列集合选项或从@TimeSeries注释中提取选项来创建集合,如下例所示。

示例 122.创建时间序列集合

通过 MongoDB 驱动程序创建时间序列

template.execute(db -> {

com.mongodb.client.model.CreateCollectionOptions options = new CreateCollectionOptions();

options.timeSeriesOptions(new TimeSeriesOptions("timestamp"));

db.createCollection("天气", 选项);

返回“确定”;

});

创建时间序列集合 CollectionOptions

template.createCollection("天气", CollectionOptions.timeSeries("timestamp"));

创建从注释派生的时间序列集合

@TimeSeries(collection="weather", timeField = "timestamp")

公共类测量{

字符串标识;

即时时间戳;

// ...

}

template.createCollection(Measurement.class);

上面的代码片段可以很容易地转移到提供相同方法的反应式 API。确保正确订阅返回的发布者。

12. MongoDB 会话

从 version 3.6 开始,MongoDB 支持 session 的概念。会话的使用启用了 MongoDB 的因果一致性模型,该模型保证以尊重其因果关系的顺序运行操作。这些分为ServerSession实例和ClientSession实例。在本节中,当我们谈到会话时,我们指的是ClientSession。

客户端会话内的操作与会话外的操作并不隔离。

双方MongoOperations并ReactiveMongoOperations提供捆绑的网关的方法ClientSession来操作。MongoCollection并MongoDatabase使用实现 MongoDB 的集合和数据库接口的会话代理对象,因此您无需在每次调用时添加会话。这意味着对 的潜在调用MongoCollection#find()被委托给MongoCollection#find(ClientSession)。

诸如(Reactive)MongoOperations#getCollection返回本机 MongoDB Java Driver 网关对象(例如MongoCollection)之类的方法本身为ClientSession. 这些方法不是会话代理的。ClientSession当直接与 a MongoCollectionor交互时,您应该提供需要的地方,MongoDatabase而不是通过 上的#execute回调之一MongoOperations。

12.1.同步ClientSession支持。

以下示例显示了会话的用法:

例 123.ClientSession与MongoOperations

ClientSessionOptions sessionOptions = ClientSessionOptions.builder()

.causallyConsistent(true)

.build();

ClientSession session = client.startSession(sessionOptions);

template.withSession(() -> session)

.execute(action -> {

Query query = query(where("name").is("Durzo Blint"));

Person durzo = action.findOne(query, Person.class);

Person azoth = new Person("Kylar Stern");

azoth.setMaster(durzo);

action.insert(azoth);

return azoth;

});

session.close()

从服务器获取新会话。

MongoOperation像以前一样使用方法。在ClientSession被自动应用。

确保关闭ClientSession.

关闭会话。

在处理DBRef实例时,尤其是延迟加载的实例时,在加载所有数据之前不要关闭实例是很重要的ClientSession。否则,延迟获取失败。

12.2.反应式ClientSession支持

反应式对应使用与命令式相同的构建块,如以下示例所示:

例 124.ClientSession 与 ReactiveMongoOperations

ClientSessionOptions sessionOptions = ClientSessionOptions.builder()

.causallyConsistent(true)

.build();

Publisher<ClientSession> session = client.startSession(sessionOptions);

template.withSession(session)

.execute(action -> {

Query query = query(where("name").is("Durzo Blint"));

return action.findOne(query, Person.class)

.flatMap(durzo -> {

Person azoth = new Person("Kylar Stern");

azoth.setMaster(durzo);

return action.insert(azoth);

});

}, ClientSession::close)

.subscribe();

获取一个Publisher用于新会话检索。

ReactiveMongoOperation像以前一样使用方法。在ClientSession获得并自动应用。

确保关闭ClientSession.

在您订阅之前什么都不会发生。有关详细信息,请参阅Project Reactor 参考指南。

通过使用Publisher提供实际会话的 ,您可以将会话获取推迟到实际订阅点。尽管如此,您需要在完成后关闭会话,以免陈旧的会话污染服务器。当您不再需要会话时,使用doFinally挂机execute进行呼叫ClientSession#close()。如果您更喜欢对会话本身进行更多控制,则可以ClientSession通过驱动程序获取并通过Supplier.

反应式使用ClientSession仅限于模板 API 使用。目前没有与反应式存储库的会话集成。

13. MongoDB 事务

从版本 4 开始,MongoDB 支持Transactions。事务建立在Sessions之上,因此需要一个活动的ClientSession.

最新更新

友情链接

热门标签

丹江口市第一中学_丹江口市第一中学中文网_丹江口市第一中学校园网 Copyright@ 2018-2021 http://www.djkyz.cn
Copyright © 2002-2021 丹江口市第一中学 版权所有
网站备案号 : 鄂ICP备07004022 网站地图