问题标签 [capped-collections]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - 使用 Spring 数据 MongoDB @Document 创建一个上限集合
我正在尝试使用 MongoDB 在 spring-data 中提供响应式支持。我正在使用 spring-boot 2.0.0。
通常我会在我的项目中编写这样的域对象:
使用这个 spring-data 它将在 MongoDB 中创建一个名为 priceData 的集合。如果我想自定义它,那么我会使用以下collection
属性:
因为我想尝试对 MongoDB 的响应式支持,所以我想创建一个有上限的集合,以便我可以使用@Tailable
游标查询。
我可以在我的 MongoDB 数据库中创建一个上限集合,如下所示:
或者
如果我使用一些外部 MongoDB 数据库,我可以只运行一次这个命令,这不是一个大问题。但是,如果我使用嵌入式 MongoDB,那么我会将它放在一个类中,该类将在每次启动期间执行。
无论哪种方式,我都会在第一个请求之前创建一个集合。所以我想知道是否有一种方法,我可以向 spring-data-mongodb 指定我需要一个上限集合而不是常规集合。不幸的是@Document
,在这种情况下没有帮助。
mongodb - mongodb 上限集合从偏移量消耗
我们正在考虑使用 MongoDB capped collections 作为我们的 fifo 队列。我们的要求如下:
- 消息的处理应按插入顺序进行
- 不应丢失/跳过任何消息
- 我们应该能够从特定的偏移量开始消费
但是我们面临以下问题:上限集合保证按插入顺序读取。但是,_id 不能保证是单调的。这意味着如果有多个生产者,可能会出现以下情况:
这意味着如果我们开始使用以下代码:
然后将跳过带有 5b72f12599757c9e26c0946c 的消息。
所以我的问题如下:
- 是否可以保证上限集合的单调 ID?
- 是否可以从特定偏移量开始消费而不跳过乱序 _id 的消息?
- 我们错过了什么吗?
提前致谢。
mongodb - 如何通过 storageSize 而不是 dataSize 创建上限集合?
在 Debian GNU/Linux 9 (stretch) 上运行 MongoDB 4.0.4,集合大小上限为 2.9TB,使用 WiredTiger 引擎的文档数量不受限制。
所以size
达到了2.9T的上限,我也开始覆盖旧文件。但是,我在创建集合时考虑到了存储大小,我不太关心未压缩数据的大小。
磁盘上有足够的空间(8TB)。在 1M 的上限集合中也得到了完全相同的行为。
我可以storageSize
改为限制集合大小吗?
node.js - Mongo Tailable Cursor { Error: No More Documents in Tailed Cursor }
当我尝试运行我的代码时,它显示“MongoError:Tailed Cursor 中没有更多文档”。
reactive-programming - 在 Spring Boot 中对加盖的 mongodb 集合进行排序
我正在尝试按降序对上限集合进行排序。
我尝试过的:
它给:
查询失败,错误代码为 2,错误消息不能使用除 {$natural: 1}' 以外的排序的 tailable 选项
但是当我在 robo3t 中使用这个查询时:
它工作正常!
有什么帮助吗?
mongodb - Tailable 游标与更改流,用于通知上限集合中的插入操作
我很好奇在可用性和性能方面,使用可尾游标与带有过滤器的更改流对上限集合进行插入操作的优缺点。
我有一个包含更新对象的上限集合。此集合唯一可能的操作是插入新更新(作为新记录),我需要将其中继到我的应用程序后端并通过 SSE/WebSockets 实时分发。我将在订阅查询中使用单个参数,它是一个时间戳,它是对象属性的一部分。该集合在该字段上有一个索引。我还将对新添加的记录进行一些基本过滤,因此 Change Streams 的聚合框架会有所帮助。
我读过:MongoDB 中的 changeStream 和可尾游标之间有什么区别,它总结了可尾游标和更改流之间的区别。
此外,关于Capped Collections的 mongodb 文章只说明了 Tailable 游标方法,而关于 Tailable 游标的文章指出它们不使用索引,您应该使用普通游标来获取结果。
简而言之,我需要一个可靠的集合更新流,完全基于在集合中插入新记录。我应该采用哪种方法?
mongodb - 真的可以不在 MongoDB 中的上限集合上创建索引吗?
文档说集合上的索引不是必需的,这为插入和/或按插入排序的数据获取提供了更好的性能。
...因此,查询不需要索引即可按插入顺序返回文档。如果没有这种索引开销,上限集合可以支持更高的插入吞吐量。
但是,进一步阅读,它说:
默认情况下,上限集合具有 _id 字段和 _id 字段上的索引。
无论如何,默认情况下都会创建一个索引,我认为它这样做是因为您很可能希望在某个时候更新集合中的数据:
如果您计划更新上限集合中的文档,请创建索引,以便这些更新操作不需要集合扫描。
但是有 property autoIndexId
,这个属性可以设置为false
,但是文档说:
从 MongoDB 4.0 开始,在本地数据库以外的数据库中创建集合时,不能将选项 autoIndexId 设置为 false。
这意味着:当我将我的数据库上传到云端时,我的上限集合会将autoIndexId
属性设置为true
吗?
或者文档是否提到必须将此选项设置为 localhost 才能将数据库上传到云端?
总之,我要创建的集合不会更新文档,那么如何才能实现文档所说的“更高的插入性能”呢?刚刚设置autoIndexId
为false
?
我希望你能帮助我理解:)