mongodb上限集合_用Java创建MongoDB上限集合

mongodb上限集合

在MongoDB中,可以以循环方式将文档的插入顺序保留到集合中。 这些类型的集合在MongoDB中称为上限集合。 MongoDB文档描述了上限集合:

上限集合是固定大小的集合,它们支持高吞吐量操作,这些操作根据插入顺序来插入,检索和删除文档。 封顶的集合的工作方式类似于循环缓冲区:一旦集合填满了分配的空间,它就会通过覆盖集合中最旧的文件来为新文件腾出空间。”

好的,所以我们知道什么是上限集合,但是如何创建集合呢?

在MongoDB Shell中,我们将使用db.createCollection命令创建一个有上限的集合:

db.createCollection("logs", {capped: true,size: 4096,max:5})

该命令告诉MongoDB创建一个称为“日志”的集合,最大大小为4096字节,最多可容纳5个文档。 当添加第6个文档时,第一个文档将从集合中删除,确保该集合中最多只能有5个文档。 “ size”参数是必需的,但是“ max”参数是可选的。

在Java中,有两种与MongoDB进行通信的常用方法: MongoDB Java驱动程序以及Morphia (用于将Java对象映射到MongoDB或从MongoDB映射的轻量级类型安全映射库)。

首先,让我们首先来看一下Java驱动程序。

Java驱动

再次使用Java驱动程序,我们使用db.createCollection命令,这一次传递了BasicDBObject作为参数。 此参数具有字段“封顶”,“大小”和“最大”,这些字段指定对集合进行封顶,集合的最大大小(以字节为单位)和集合中的最大条目数。 以下代码段显示了如何连接到MongoDB的本地实例并创建上限集合。

MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost"));
DB db = mongoClient.getDB("test");DBCollection collection;
if (!db.collectionExists("cappedLogsJavaDriver")) {BasicDBObject options = new BasicDBObject("capped", true);options.append("size", 4096);options.append("max", 5);collection = db.createCollection("cappedLogsJavaDriver", options);
} else {collection = db.getCollection("cappedLogsJavaDriver");
}

创建集合后,我们可以将文档插入其中以确保其按预期工作。 以下代码段显示了如何将8个文档插入到集合中(请记住,由于这是一个有上限的集合,因此将仅存储其中的最后5个)。

for (int i = 0; i < 8; i++) {BasicDBObject logEntry = new BasicDBObject("logId", i);collection.insert(logEntry);
}

使用MongoDB交互式外壳,我们可以验证现在存储在集合中的文档是否符合预期。

> db.cappedLogsJavaDriver.find()
{ "_id" : ObjectId("54a1ca44a82617da4f72e025"), "logId" : 3 }
{ "_id" : ObjectId("54a1ca44a82617da4f72e026"), "logId" : 4 }
{ "_id" : ObjectId("54a1ca44a82617da4f72e027"), "logId" : 5 }
{ "_id" : ObjectId("54a1ca44a82617da4f72e028"), "logId" : 6 }
{ "_id" : ObjectId("54a1ca44a82617da4f72e029"), "logId" : 7 }

摩菲亚

现在,我们已经了解了如何通过Java驱动程序创建集合,让我们看看如何使用Morphia来完成相同的事情。

Morphia的本质是将Java类映射到MongoDB或从MongoDB映射。 我们希望保留在MongoDB中的类使用@Entity注释进行注释,然后将其存储在通常以该类进行命名的集合中。 要创建一个有上限的集合,我们必须在@Entity注释上添加其他值,以指定集合中的最大条目数和集合的大小。 对与Java驱动程序示例中使用的对象类型相同的对象进行建模,我们将创建一个LogEntry类,如下所示:

@Entity(value="cappedLogsMorphia", cap=@CappedAt(count=5, value=4096))
public class LogEntry {private int logId;@Idprivate ObjectId id;public LogEntry(int logId) {this.logId = logId;}public int getLogId() {return logId;}public void setLogId(int logId) {this.logId = logId;}
}

我们可以看到该类以@Entity注释,指定该集合最多应包含5个文档和4096字节的大小。

使用Morphia,可以在启动时通过调用Morphia Datastore上的.ensureCaps .ensureCaps()方法来创建有上限的集合,如下所示。

MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost"));
DB db = mongoClient.getDB("test");Morphia morphia = new Morphia();
morphia.map(LogEntry.class);Datastore datastore = morphia.createDatastore(mongoClient, "test");
datastore.ensureCaps();

再次,和以前一样,我们可以将8个文档插入到集合中以验证仅存储了最后5个文档。

for (int i = 0; i < 8; i++) {LogEntry logEntry = new LogEntry(i);datastore.save(logEntry);
}
> db.cappedLogsMorphia.find()
{ "_id" : ObjectId("54a1ce9da82629642c64f5d9"), "className" : "com.davidsalter.cappedcollection.LogEntry", "logId" : 3 }
{ "_id" : ObjectId("54a1ce9da82629642c64f5da"), "className" : "com.davidsalter.cappedcollection.LogEntry", "logId" : 4 }
{ "_id" : ObjectId("54a1ce9da82629642c64f5db"), "className" : "com.davidsalter.cappedcollection.LogEntry", "logId" : 5 }
{ "_id" : ObjectId("54a1ce9da82629642c64f5dc"), "className" : "com.davidsalter.cappedcollection.LogEntry", "logId" : 6 }
{ "_id" : ObjectId("54a1ce9da82629642c64f5dd"), "className" : "com.davidsalter.cappedcollection.LogEntry", "logId" : 7 }

检查收集状态

在MongoDB中创建一个有上限的集合后,我们可以通过在Mongo DB交互式外壳程序中对该集合执行.stats()方法来检查其状态。

> db.cappedLogsJavaDriver.stats()
{"ns" : "test.cappedLogsJavaDriver","count" : 5,"size" : 180,"avgObjSize" : 36,"storageSize" : 4096,"numExtents" : 1,"nindexes" : 1,"lastExtentSize" : 4096,"paddingFactor" : 1,"systemFlags" : 1,"userFlags" : 0,"totalIndexSize" : 8176,"indexSizes" : {"_id_" : 8176},"capped" : true,"max" : 5,"ok" : 1
}

在这里,我们可以看到集合确实有上限(“ capped” = true),并且集合中的最大条目数为5(“ max” = 5)。

  • 本文中使用的示例的源代码可以在GitHub上找到 。

翻译自: https://www.javacodegeeks.com/2015/03/creating-a-mongodb-capped-collection-in-java.html

mongodb上限集合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程语言:C语言与Java的细致对比,你知道选谁了吗?

点击上方蓝字关注我&#xff0c;了解更多咨询1.Java与C语言各自的优势C语言是面向过程的语言&#xff0c;执行效率高;Java是面向对象的语言&#xff0c;执行效率比C语言低。C语言最关键的是比Java多了指针&#xff0c;这也说明了Java的健壮性&#xff0c;还有Java的多线程机制使…

ajax实现表单验证 html,Ajax+ajax做的表单验证

//Ajx实现异步示例&#xff0c;blur实现失去焦点触发jQuery(#formname).blur(check);function check(){alert("开始执行Ajax");//判断用户是否存在var formname jQuery("#formname").val();if(formname""){jQuery(#msgName).html(表单名称不能为…

java ee maven_针对新手的Java EE7和Maven项目–第8部分

java ee maven第一部分 &#xff0c; 第2部分 &#xff0c; 第3部分 &#xff0c; 第4部分 &#xff0c; 第5部分 &#xff0c; 第6部分 &#xff0c; 第7部分 第8部分 自上一篇文章以来&#xff0c;这一系列教程已经有很长时间了。 是时候恢复并在我们的简单项目中添加…

Python、Perl 垫底,C语言才是最环保的编程语言

点击上方蓝字关注我&#xff0c;了解更多咨询提到编程语言&#xff0c;人们第一时间想到的无非是&#xff1a;哪个编程语言简单易学&#xff0c;亦或是最挣钱等。但是编程语言功耗问题却被很多人忽视。那么作为程序员的我们如何选择编程语言&#xff0c;使其以低能耗高功效地工…

改变数据类型的装饰器_用装饰器改变收藏

改变数据类型的装饰器装饰图案 自从第一次学习编程设计模式以来&#xff0c;装饰器模式一直是我的最爱。 在我看来&#xff0c;这是一个很新颖的想法&#xff0c;比其他想法有趣得多。 不要误会我的意思&#xff0c;其他大多数人也引起了我的注意&#xff0c;但没有什么比装饰器…

khoury计算机科学学院,东北大学Open House中国站

东北大学Open House中国站 -10月26日北京 & 10月27日上海东北大学向金吉列留学的学生发来诚挚邀请&#xff0c;欢迎您的学生前来参加东北大学于 10 月 26 日(周六)在北京 和 10 月 27 日(周日)在上海 举办的东北大学 Open House 教育展。在这两个 Open House 教育展上&…

jvm jstat_使用jstat报告自定义JVM指标集

jvm jstat我一直缺少在JStat中配置自定义标头的可能性 。 当然&#xff0c;有很多预定义的数据集&#xff0c;但是如果我们可以创建自己的数据集&#xff0c;那就更好了。 正如您可能已经设计的那样&#xff0c;我正在写这篇文章&#xff0c;因为这样的功能当然是可用的:)不幸的…

知识分享:值得学习的C语言经典开源项目

点击上方蓝字关注我&#xff0c;了解节气咨询听上去有些荒谬&#xff0c;C语言的产生竟然源于一个失败的项目。1969年&#xff0c;通用电气、麻省理工学院和贝尔实验室联合创立了一个庞大的项目——Multics工程。该项目的目的是创建一个操作系统&#xff0c;但显然遇到了麻烦&a…

计算机主机中网卡的作用,计算机硬件组成及作用

计算机硬件组成及作用今天百分网小编介绍一下电脑各组件&#xff0c;加深一下理解&#xff0c;让还不太懂的人可以对自己的电脑有一个整体的了解&#xff0c;希望对你有所帮助!一、电源电源是电脑最重要的部件&#xff0c;相当于人体的心脏&#xff0c;向所有的零部件输送血液&…

oracle idm_批准Oracle IDM中的特定Web服务

oracle idm关于Web服务端点的快速发布&#xff0c;OIM和SOA在与批准有关的场景中使用了Web服务端点- 基本内容&#xff0c;但对于初学者可能有用 。 Oracle IDM与SOA套件集成并利用其提供与批准相关的功能&#xff08;说实话&#xff0c;SOA非常丰富&#xff0c;并且也被用作W…

C语言编程笔记:关于 for循环 的那些不为人知的秘密

点击上方蓝字关注我&#xff0c;了解更多咨询好吧&#xff0c;也许你认为我在写一篇如何使用for循环的文章&#xff0c;&#xff0c;&#xff0c;&#xff0c;首先&#xff0c;我想说无论是学习C语言还是学习java的同学都能从此文中获益&#xff0c;还有&#xff0c;你确定你会…

chrome for mac html5,javascript – Mac上的Chrome浏览器问题

我一直在寻找很长一段时间,因为画布元素上的旋转矩形的绘制,擦除和重绘在Mac上的谷歌浏览器中不起作用.我需要这个,因为我想在画布上渲染悬停叠加层.我创建了一个代表我的代码的小提琴&#xff1a;linkHTML&#xff1a;使用Javascript&#xff1a;var canvas null;var ctx;var …

weld焊接_玩Weld-Probe –一站式查看CDI的所有方面

weld焊接当我坐在DevConf.CZ的会议室时&#xff0c; Weld 3.0.0.Alpha4已发布 。 大约在Jozef Hartinger&#xff08; jozefhartinger &#xff09;旁边或多或少 &#xff0c;后者在共享休息前几分钟告诉我有关此最新版本的新功能的信息。 有一个特别的功能真正引起了我的注意&…

C语言:一种通用的程序设计语言

点击上方蓝字关注我&#xff0c;了解更多咨询语言是一种通用的程序设计语言。它同UNIX系统之间具有非常密切的关系。C语言是在UNIX系统上开发的&#xff0c;且无论是UNIX系统本身还是其上运行的大部分程序&#xff0c;都是C语言编写的。但是C语言并不受限于任何一种操作系统或机…

可禁用计算机服务,win10哪些服务可以禁用 服务哪些可以禁止启动

win10服务哪些可以禁止启动&#xff1f;方法一&#xff1a;命令方法首先使用 Windows R 组合快捷键打开“运行”窗口&#xff0c;之后键入 services.msc 按下回车键&#xff0c;即可打开“服务”。方法二&#xff1a;快捷方式法在Win10桌面的“此电脑”图标上点击鼠标右键&…

drill apache_如何使用Apache Drill分析高度动态的数据集

drill apache当今的数据是动态的&#xff0c;并由应用程序驱动。 由诸如Web /社交/移动/ IOT等行业趋势驱动的新业务应用时代的增长正在生成具有新数据类型和新数据模型的数据集。 这些应用程序是迭代的&#xff0c;并且关联的数据模型通常是半结构化的&#xff0c;无模式的且不…

如何用最短的时间学会C语言,并掌握C语言的精髓所在?

点击上方蓝字关注我&#xff0c;了解更多咨询及C语言&#xff0c;我想凡是学过它的朋友都有这样一种感觉&#xff0c;那就是“让我欢喜让我忧。”欢喜的是&#xff0c;C语言功能非常强大、应用广泛&#xff0c;一旦掌握了后&#xff0c;你就可以理直气壮地对他人说“我是电脑高…

山西能源计算机专业,山西能源学院计算机科学与技术专业2016年在四川理科高考录取最低分数线...

类似问题答案四川大学计算机科学与技术专业2016年在山西理科高考录取最低分数线学校 地 区 专业 年份 批次 类型 分数 四川大学 山西 计算机科学与技术 2016 一批 理科 610 学校 地 区 专业 年份 批次 类型 分数 四川大学 山西 计算机科学与技术 2016 一批 理科 610 四川大学 山…

apache fop_Apache FOP与Eclipse和OSGi的集成

apache fopApache FOP是由XSL格式化对象&#xff08; XSL-FO &#xff09;驱动的开源打印处理器。 例如&#xff0c;将数据对象转换为PDF可能非常有用。 但是&#xff0c;事实证明&#xff0c;将其集成到PDE中并最终以OSGi Service的形式启动和运行有点麻烦。 因此&#xff0c…

2022年最值得学习的 5 种编程语言,你有在学习吗?

点击上方蓝字关注我&#xff0c;了解更多咨询作为一个初学者电脑程序员&#xff0c;很多人都会想知道当下主流的编程语言有哪些&#xff0c;哪些行业和公司都在用它们&#xff0c;因为这些信息可以帮助你了解想要学习的内容&#xff0c;使你更接近最终想用代码完成的事情。今天…