如何在NoSQL和RDBMS中进行用户定义的列

时间:2019-01-23 19:50:45

标签: mongodb nosql

我们很快将重写一个应用程序,该应用程序将允许最终用户定义对象和这些对象上的字段。

我正在考虑使用NoSQL来完成此任务,但对它的熟悉程度还不足以知道这是最佳选择还是RDBMS。

我来自MSSQL背景,并且熟悉在RDBMS中处理此用例的选项:在表上添加“ CustomField1”类型的字段;创建一个属性表;使用ALTER语句来更改物理模式等。没有一个适合我。

为了进一步使数据复杂化,数据将被用户的站点人为地隔离。换句话说,所有数据都将存储在一个数据库中,但是字段将在站点级别上定义。

因此,我开始探索NoSQL(例如Mongo和Couch)。我喜欢存储json文档的想法。对于这样的事情,它“感觉”更自然。但这是新领域,有点吓人。确实,这将是“松散”模式。对象本身是众所周知的,但字段可能会更改。用RDBMS术语来说,我们正在谈论75个以上的表对象,包括主对象,查找表,多对多表等。

我的理解是NoSQL的主要好处与可伸缩性和持久性有更多关系,在此无需担心。这是一个内部应用程序,对用户而言不是一个超重的负载。没有微服务或类似的东西。因此,在处理用户定义的列时,是否/何时使用NoSQL,甚至表与文档方法的根本差异方面,我还没有看到太多。我读过的大多数内容都是关于性能和可伸缩性的。

关注点:

  • 报告。这是一个销售应用程序,必须获取汇总数据。我们使用SSRS和Tableau。
  • 我们将使用.Net Core API。从历史上看,我们使用ORM(NHibernate,实体框架)。我不喜欢这种方法,但需要了解NoSQL环境中的“等效”。
  • 性能。由于各种原因,我们当前的堆栈-.Net 4.5,NHB,MSSQL-并不是很好。 NoSQL如何拉大对象图?您如何(或不愿意)拉回json文档的“一部分”?
  • 大量更新。像在MSSQL中一样,我可以执行UPDATE mytable SET col1 ='foo'WHERE col2 ='bar'。只是要确保存在相同的东西,并且在NoSQL中它是高效的!

顺便说一句,我在软件推荐网站上对此几乎没有任何看法。我不知道这是人流量少的网站还是什么。但是我对此非常了解,知道这是一个问这个问题的好地方。

因此,基本上,我的问题是:考虑到上述问题,NoSQL是用户定义字段的最佳数据库选项吗?为什么或者为什么不?还是我应该坚持使用MSSQL。

致谢!

1 个答案:

答案 0 :(得分:1)

我正在回答wrt mongodb数据库,

回答您的问题

  1. 是的,mongodb支持聚合操作,而mongodb Enterprise附带了BI连接器,使用该连接器可以连接到Tableau和excel等BI工具

  2. 如果要使用MongoDB Atlas(Mongodb的云版本),它将提供mongodb针,将您的ongb数据公开为其他api。

  3. 是的,您可以使用$ project运算符拉回json文档的一部分,它将提高您的性能

  4. 是的,您可以使用db.collection.updateMany()函数进行大规模更新,例如MSSQL。

回到最初的问题,因为没有sql数据库缺少架构,所以只要将新字段添加到集合(表)中,就无需修改架构。