使用MongoDB而不是MS SQL Server的优点和缺点

the*_*ter 34 sql schema mongodb

我是NoSQL世界的新手,并且正在考虑将我的MS Sql Server数据库替换为MongoDB.我的应用程序(用.Net C#编写)与IP摄像头交互,并将来自Camera的每个图像的元数据记录到MS SQL数据库中.平均而言,我每天为每个摄像机插入大约86400条记录,在当前的数据库模式中,我为单独的摄像机图像创建了单独的表,例如Camera_1_Images,Camera_2_Images ... Camera_N_Images.单个图像记录由简单的元数据信息组成.像AutoId,FilePath,CreationDate.为了向此添加更多详细信息,我的应用程序为每个摄像头启动单独的进程(.exe),每个进程在数据库的相对表中每秒插入1条记录.

我需要(MongoDB)专家就以下问题提出建议:

  1. 判断MongoDB是否适合保存这些数据,最终将根据时间范围查询(例如,在指定的小时内检索特定摄像机的所有图像)?关于我的案例的基于文档的架构设计的任何建议?

  2. 什么应该是服务器(CPU,RAM,磁盘)的规格?有什么建议吗?

  3. 我应该考虑为这种情况进行分片/复制(同时考虑写入同步副本集的性能)吗?

  4. 在同一台机器上使用多个数据库有什么好处,因此一个数据库将保存所有摄像机的当前图像,第二个数据库将用于存档前一天的图像?关于在不同的数据库上拆分读写,我正在考虑这个问题.因为所有读取请求可能由第二个数据库提供并写入第一个数据库.它会受益吗?如果是,那么任何想法都要确保两个数据库始终同步.

欢迎任何其他建议.

Ara*_*ram 29

我自己是NoSQL数据库的先驱.所以我以牺牲潜在的选票为代价来回答这个问题,但对我来说这将是一次很棒的学习经历.

在尽我所能回答您的问题之前,我应该说如果MS SQL Server适合您,那么坚持下去.您没有提到任何有效的理由为什么要使用MongoDB,除非您将其了解为面向文档的数据库.此外,我发现您为每个摄像头捕获的元数据几乎相同,即您的模式是动态的.

  • 判断MongoDB是否适合保存这些数据,最终将根据时间范围查询(例如,在指定的小时内检索特定摄像机的所有图像)?关于我的案例的基于文档的架构设计的任何建议?

MongoDB的是一个面向文档的数据库,善于查询的集合(你叫它文件).由于您已经将每个摄像机的数据存储在自己的表中,因此在MongoDB中,您将为每个摄像机创建一个单独的集合.以下是执行日期范围查询的方法.

  • 什么应该是服务器(CPU,RAM,磁盘)的规格?有什么建议吗?

所有NoSQL数据库都是为了在商用硬件上进行横向扩展而构建的.但顺便问一下,你可能会考虑通过扩大规模来提高性能.您可以从合理的计算机开始,随着负载的增加,您可以继续添加更多服务器(向外扩展).您无需计划和购买高端服务器.

  • 我应该考虑为这种情况进行分片/复制(同时考虑写入同步副本集的性能)吗?

MongoDB 锁定整个数据库以进行单次写入(但其他操作的结果),并且适用于读取数多于写入数的系统.所以这取决于你的系统.有多种分片方式,应该是特定于域的.一般答案是不可能的.但是,可以给出一些例子,如地理分片,分支等.

另请阅读CAP定理的简明英文介绍

更新了对分片注释的回答

根据他们的文档,您应该考虑部署分片群集,如果:

  • 您的数据集接近或超过系统中单个节点的存储容量.
  • 系统的活动工作集的大小将很快超过系统最大RAM容量.
  • 您的系统有大量的写入活动,单个MongoDB实例无法快速写入数据以满足需求,而所有其他方法都没有减少争用.

所以基于最后一点是的.自动分片功能用于扩展写入.在这种情况下,你必须每一个写锁碎片,而不是每个数据库.但我的理论答案.我建议你咨询10gen.com小组.