首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以取代MongoDB的存储引擎作为键值存储吗

我可以取代MongoDB的存储引擎作为键值存储吗
EN

Stack Overflow用户
提问于 2015-08-10 12:19:20
回答 1查看 136关注 0票数 0

MongoDB很容易上手,但要保证可用性并不容易(购买EC2来构建主从机?或更多副本集?)。并且有许多高可用性和高性能的关键价值公共服务(Dynamo,AzureTable)。因此,如果我可以将MongoDB存储引擎替换为,例如Dynamo,那么我就可以获得友好的MongoDB应用程序接口和高可用存储空间。这有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2015-08-10 17:11:20

实际上,将MongoDB用作内存中的键值存储非常容易:

方法1:防止磁盘使用

  1. Disable journaling
  2. Set syncPeriodSecs to 0
  3. Store _id字段中的键和value字段中的值。
  4. 现在您有了一个内存中的键/值存储

这种方法的问题在于,您受到计算机RAM大小的限制,并且您的数据不能持久存储。

到目前为止,更优雅的方法是使用

方法2:使用覆盖查询

覆盖查询是仅使用索引来回答的查询,只要有足够的索引可用,该索引就会一直保存在内存中。如果索引超过RAM,则将最近最少使用的部件“交换”到磁盘。此外,您的键/值对是持久化的。所有这一切都是透明的。

  1. 在键和值上创建索引:

db.keyValueCollection.createIndex({_id:1,value:1})

  • Make确保MongoDB被告知只需要_idvalue,它不需要费心从磁盘读取任何其他内容(灵活的模式!)使用投影将查询中返回的字段限制为这两个字段:

value:1})

  • Done!({_id:“foo”},{_id:1,foo现在将从内存中回答您的查询,溢出将自动处理,您的值将保持不变。

旁注

使用MongoDB确保可用性近乎万无一失。选择一个副本集名称,将其添加到所有confit文件中,启动其中一个成员,启动副本集并添加成员。问题解决了。

编辑:删除了一个人工key字段,并确保通过限制返回的字段来覆盖方法2中的查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31911569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档