我是 NoSQL 世界的新手,正在考虑将 MS Sql Server 数据库替换为 MongoDB。我的应用程序(用 .Net C# 编写)与 IP 摄像机交互,并将来自摄像机的每个图像的元数据记录到 MS SQL 数据库中。平均而言,我每天为每个摄像头插入约 86400 条记录,并且在当前的数据库架构中,我为单独的摄像头图像创建了单独的表,例如相机_1_图像、相机_2_图像...相机_N_图像。单个图像记录由简单的元数据信息组成。例如 AutoId、FilePath、CreationDate。为了添加更多详细信息,我的应用程序为每个摄像头启动单独的进程 (.exe),每个进程每秒在数据库的相关表中插入 1 条记录。
我需要(MongoDB)专家就以下问题提出建议:
判断 MongoDB 是否适合保存此类数据,最终将根据时间范围查询这些数据(例如,检索指定小时内特定相机的所有图像)?关于我的案例的基于文档的架构设计有什么建议吗?
服务器的规格是什么(CPU、RAM、磁盘)?有什么建议吗?
我是否应该考虑这种情况下的分片/复制(同时考虑写入同步副本集的性能)?
在同一台计算机上使用多个数据库是否有任何好处,以便一个数据库将保存所有摄像机当天的图像,而第二个数据库将用于存档前一天的图像?我正在考虑在不同的数据库上拆分读取和写入的问题。因为所有读取请求可能由第二个数据库提供服务并写入第一个数据库。会不会有好处呢?如果是,那么有什么想法可以确保两个数据库始终同步。
欢迎任何其他建议。
我本人是 NoSQL 数据库的入门者。因此,我以潜在的反对票为代价来回答这个问题,但这对我来说将是一次很好的学习经历。
在尽力回答你的问题之前,我应该说,如果 MS
SQL Server 非常适合您,然后坚持使用它。你还没有
提到了您想要使用 MongoDB 的任何正当理由,但事实除外
您了解到它是一个面向文档的数据库。而且我看到
您拥有几乎相同的元数据集
每个相机(即您的架构)都是动态的。
- 判断 MongoDB 是否适合保存此类数据,最终将根据时间范围查询这些数据(例如,检索指定小时内特定相机的所有图像)?关于我的案例的基于文档的架构设计有什么建议吗?
MongoDB 是一个面向文档的数据库,擅长查询within一个聚合(你称之为文档)。由于您已经将每个摄像机的数据存储在自己的表中,因此在 MongoDB 中您将拥有一个单独的表收藏为每个相机创建。这是如何 http://cookbook.mongodb.org/patterns/date_range/您执行日期范围查询。
- 服务器的规格是什么(CPU、RAM、磁盘)?有什么建议吗?
所有 NoSQL 数据库都是为了向外扩展在商品硬件上。但顺便说一句,您提出这个问题时,您可能正在考虑通过以下方式提高性能扩大。您可以从一台合理的机器开始,随着负载的增加,您可以继续添加更多服务器(横向扩展)。您无需规划和购买高端服务器。
- 我是否应该考虑这种情况下的分片/复制(同时考虑写入同步副本集的性能)?
MongoDB 锁定整个数据库 https://stackoverflow.com/questions/10175525/what-level-does-mongodb-write-lock-take-place适用于单次写入(但会产生其他操作),适用于读取多于写入的系统。所以这取决于您的系统如何。分片的方式有多种,并且应该针对特定领域。不可能给出通用答案。然而,可以给出一些例子,比如按地理位置、按分支等进行分片。
另请阅读CAP 定理的简单英语介绍 http://ksat.me/a-plain-english-introduction-to-cap-theorem/
更新了对分片评论的回答
根据他们的文档 http://docs.mongodb.org/manual/core/sharding/,如果满足以下条件,您应该考虑部署分片集群:
- 您的数据集接近或超过系统中单个节点的存储容量。
- 系统活动工作集的大小很快就会超过系统最大 RAM 的容量。
- 您的系统有大量的写入活动,单个 MongoDB 实例无法足够快地写入数据来满足需求,以及所有其他
方法并没有减少争用。
所以基于最后一点是的。自动分片功能是为了扩展写入而构建的。在这种情况下,你有一个写锁shard,不按database。但我的答案是理论上的。建议您去10gen.com群咨询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)