使用 MongoDB 代替 MS SQL Server 的优点和缺点 [关闭]

2023-12-20

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

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

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

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

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

  4. 在同一台计算机上使用多个数据库是否有任何好处,以便一个数据库将保存所有摄像机当天的图像,而第二个数据库将用于存档前一天的图像?我正在考虑在不同的数据库上拆分读取和写入的问题。因为所有读取请求可能由第二个数据库提供服务并写入第一个数据库。会不会有好处呢?如果是,那么有什么想法可以确保两个数据库始终同步。

欢迎任何其他建议。


我本人是 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(使用前将#替换为@)

使用 MongoDB 代替 MS SQL Server 的优点和缺点 [关闭] 的相关文章

  • 从存储过程中的动态 SQL 获取结果

    我正在编写一个存储过程 需要在过程中动态构造 SQL 语句以引用传入的表名称 我需要让这个 SQL 语句返回一个结果 然后我可以在整个过程的其余部分中使用该结果 我尝试过使用临时表和所有内容 但我不断收到一条消息 提示我需要声明变量等 例如
  • 为什么 Mongohint 可以使查询运行速度提高 10 倍?

    如果我使用explain 从shell运行mongo查询 获取所使用的索引的名称 然后再次运行相同的查询 但使用hint 指定要使用的相同索引 解释计划中的 millis 字段是显着下降 例如 没有提供任何提示 gt gt db event
  • SQL Server 查询结果集的大小

    SQL Server 中是否有确定结果集中 Mgmt Studio 查询中返回的数据大小 以 MEGS 为单位 您可以打开客户端统计信息 查询菜单 包括客户端统计信息 它给出执行查询时从服务器返回的字节数
  • 创建涉及 ArrayType 的 Pyspark 架构

    我正在尝试为我的新 DataFrame 创建一个架构 并尝试了括号和关键字的各种组合 但无法弄清楚如何完成这项工作 我目前的尝试 from pyspark sql types import schema StructType StructF
  • Postgres、更新和锁定顺序

    我正在研究 Postgres 9 2 有 2 个更新 每个更新都有自己的事务 一个看起来像 UPDATE foo SET a 1 WHERE b IN 1 2 3 4 另一个也类似 UPDATE foo SET a 2 WHERE b IN
  • SQL Server 相当于 MySQL 的 USING

    在 MySQL 中 当您连接不同表中具有相同名称的列时 可以在连接中使用关键字 USING 例如 这些查询产生相同的结果 SELECT FROM user INNER JOIN perm USING uid SELECT FROM user
  • 将多行合并为一行并根据行数附加列

    我正在尝试将同一个表的多行合并为一个 我有一个像这样的示例表 Col1 Col2 Col3 Col4 Col5 Col6 1 BH1 CB 12 CC CC Conveyor Mal 1 BH1 CB 104 ZC ZC Full Emp
  • SQL:查找每个跑步者跑步之间的平均天数

    因此 如果我们给出下表 runner ran Carol 2011 02 01 Alice 2011 02 01 Bob 2011 02 01 Carol 2011 02 02 Bob 2011 02 02 Bob 2011 02 03 B
  • 从一个sql服务器选择到另一个sql服务器?

    我想将一台服务器 Data Old S1 中的一个表 T1 在 DB1 中 中的数据选择到另一台服务器 Data Latest S2 中的另一个表 T2 在 DB2 中 中的数据 我怎样才能做到这一点 请注意服务器的命名方式 查询也应该考虑
  • SQLSTATE[HY000] [2002] 资源暂时不可用 - mysql - innodb 和 pdo

    在我的错误日志中得到大量结果 如下所列 数据库中的所有表都是 innodb 并且就与这些表的任何交互而言 一切都是带有准备好的语句的 pdo 正如我所说 所有错误几乎与下面列出的错误相同 但发生在几个不同的页面上 无论页面如何 错误行始终指
  • T-sql、刻度、时间戳

    是否有可能在 t sql 中获得像 DateTime Ticks 这样的 C 内容 感谢帮助 您不太可能从 SQL 中获得与 DateTime Ticks 相同的精度 因为 SQL 不能以那么高的精度表达时间 SQL Server 只存储大
  • 使用包含空值列的 WHERE 子句的更新语句

    我正在使用另一个表中的数据更新一个表上的列 这WHERE子句基于多个列 并且某些列为空 根据我的想法 这个空值是什么throwing off你的标准UPDATE TABLE SET X Y WHERE A B陈述 See 这个 SQL 小提
  • 对具有许多索引的表进行缓慢的批量插入

    我尝试将数百万条记录插入到具有 20 多个索引的表中 在上次运行中 每 100 000 行花费了 4 个多小时 并且查询在 3 5 天后被取消 您对如何加快速度有什么建议吗 我怀疑是索引太多的原因 如果你也这么认为 如何在操作前自动删除索引
  • 更新每组单行

    的背景 我有一个临时表 其中包含唯一的 rowID OrderNumber 和 guestCount 等信息 RowID 和 OrderNumber 已存在于该表中 并且我正在运行一个新查询来填充每个 orderNumber 缺少的 gue
  • SQL 插入失败 - 违反主键约束

    我在 SQL Insert 语句中看到一个非常奇怪的问题 我有一个简单的表 带有一个 ID 和 2 个日期时间 请参阅下面的创建脚本 CREATE TABLE dbo DATA POPULATION LOGS ID int IDENTITY
  • ActiveRecord 嵌套 SELECT——我可以在没有手动 SQL 的情况下完成它吗?

    我有一张桌子 上面有 除其他外 一个名字和一个等级 我想返回所有唯一名称的集合 但对于返回的每个名称 我想选择排名最高的行 这很简单 有两个嵌套的 SELECT 语句 SELECT FROM SELECT FROM foo ORDER BY
  • 将此 MySQL 查询转换为 PyGreSQL

    我正在开发一个 Ruby 应用程序 它使用 mysql 函数 XOR 和 BIT COUNT 不过 我现在需要在运行 PyGreSQL 的 Heroku 上运行该应用程序 我找不到任何可以帮助我的 PyGreSQL 文档 那么任何人都可以翻
  • 如何同时使用 $gt 和 $lte 优化 MongoDB 查询?

    我有以下查询 有点像反向范围查找 db ip ranges find and start ip num lte 1204135028 end ip num gt 1204135028 当仅使用 lte 标识符运行时 查询会立即返回 但是当我
  • 如何在SqlAlchemy中执行“左外连接”

    我需要执行这个查询 select field11 field12 from Table 1 t1 left outer join Table 2 t2 ON t2 tbl1 id t1 tbl1 id where t2 tbl2 id is
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T

随机推荐

  • 将 to_char(myDate, 'DAY') 的结果与字符串进行比较时出现问题

    我一直在试图找出问题所在 但我只是运气不好 根本不理解这个问题 我有以下代码 CREATE OR REPLACE FUNCTION ckeckDay dateC in date RETURN VARCHAR IS day VARCHAR 1
  • 如何使用jquery或javascript设置innerhtml与选定的下拉选项文本?

    我想使用选定的下拉选项文本更改锚标记的内部文本 这是我的下拉列表代码 无论在此下拉列表中选择什么选项 我都想在另一个锚标记中更新该选项的文本 span class span
  • 将 Material-ui 标签定位到左侧并左对齐

    我正在使用material ui com 上提供的单选按钮组件并已设置labelPlacement start 这已将标签放在左侧 但我还希望标签左对齐 同时将单选按钮保留在右侧
  • Obex 推送配置文件的 UUID

    我尝试打开一个套接字来侦听来自非 Android 设备的传入连接 Parcelable uuidExtra device getUuids String t uuidExtra 0 toString t t toUpperCase Log
  • 为什么 System.Random 类不是静态的?

    当您使用System Random类 你必须创建它的一个实例 为什么不是static 因为如果我想要一个 0 到 9 之间的随机数 我可以使用 staticmethod System Random Next int int int ourR
  • SQL 复制设置 - 几乎完成

    我正在尝试在两个 SQL Server 之间设置复制 我几乎已经完成了 但遇到了权限错误 看起来 服务器通过 VPN 连接 发行商 发行商 W2003 SQL 2005 域控制器 订阅服务器 W2008 SQL 2008 不在域上的独立服务
  • C# WebRequest 发送表单数据大小限制

    我正在尝试在 WebRequest 中发送表单数据 该函数工作正常并按预期返回 成功 响应流 但是 如果 data 变量的长度超过 30 000 个字符 我会遇到 HTTP 500 错误 Message The remote server
  • Selenium EventFiringWebDriver 导航事件

    我正在使用 Selenium Web 驱动程序 我想监听浏览器中发生的事件 例如 当页面上的某些 javascript 导致 url 使用以下命令更改时window location 我有一个监听器附加到Navigated我的事件Event
  • Asp.Net Core 5 API Web像WCF一样以流模式上传大文件

    我需要在用 asp net core 5 制作的网络服务器上以流模式 一次一个 上传一个大文件 7GB 配置服务器端 public class Program public static void Main string args Crea
  • 将 XML 数组转换为 XML 时出现奇怪的文本

    我使用这个问题的答案将 XML 数组转换为单个 XML 输出 将 XML 数组输出为纯 XML https stackoverflow com questions 2554671 output array of xml to plain x
  • 为什么这个救援语法有效?

    好的 我正在使用的应用程序有这种方法 并且它可以在生产中使用 我的问题为什么这有效 这是新的 Ruby 语法吗 def edit load elements current user unless current user role adm
  • AWS Elastic Beanstalk 中的自定义 URL

    AWS Elastic Beanstalk 建议使用以下格式的 URL https appname elasticbeanstalk com 但我需要将其更改为我自己的网址 例如https tarta ai 怎么做 Note 我的域使用 A
  • 如何在GDB中像数组一样查看指针?

    假设定义 int a 100 Type print a然后 gdb 会自动将其显示为数组 1 2 3 4 然而 如果a作为参数传递给函数 那么gdb会将其视为普通的int指针 类型print a将显示 int 0x7fffffffdaa0
  • 如何在UI底部的固定位置设置一个按钮?

    我希望一个按钮始终出现在 UI 页脚的固定位置 总是 无论它上面是否有组件 请在您的主布局下选择一个相对布局 将其高度和宽度设置为填充父项 并将其重力设置为底部 然后将任何文本视图或任何您想要的按钮放入其中
  • setup.py - 安装后将模块符号链接到 /usr/bin

    我几乎完成了 python 包的开发 并且还使用 distutils 编写了基本的 setup py usr bin env python author Prahlad Yeri description Small daemon to cr
  • 在外部 JavaScript 文件中使用 KnockoutJS ViewModel

    如何在外部 JS 文件中创建 KO JS ViewModel 然后在 html 文件中使用它 这看起来是一件很简单的事情 但我无法让它工作 也找不到任何关于如何做到这一点的明确信息 如果我忽略了 我会道歉 如果有人能指出我的答案 我会删除它
  • 使用字段数将文件拆分为更小的文件

    我很难将一个大的 50GB csv 文件分解成更小的部分 每行有几千个字段 一些字段是双引号中的字符串 其他字段是整数 小数和布尔值 我想逐行解析文件并按每行中的字段数进行分割 字符串可能包含多个逗号 例如 以及许多空字段 1 30 50
  • Delphi 2007 和 Logitech 网络摄像头驱动程序

    不久前 我遇到了 Delphi 2007 在 Logitech 网络摄像头驱动程序运行时无法运行和调试应用程序的问题 显然 罗技驱动程序会在每个正在运行的进程中插入一个存根 从而弄乱调试器的偏移量 已经一年多了 这仍然是一个问题吗 罗技是否
  • 如何在不调用 java.lang.String 的情况下检查 clojure 中字符串的相等性?

    clojure 有没有办法检查字符串的相等性 即我需要知道它们的内容是否相等 而不是位置 thanks Clojure 中的平等 函数 总是测试值 而不是身份 所以两个字符串是 如果它们有相同的内容 对于大多数 Java 类型 包括 Str
  • 使用 MongoDB 代替 MS SQL Server 的优点和缺点 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 NoSQL 世界的新手 正在考虑将 MS Sql Server 数据库替换为 MongoDB 我