我们有一个相对较大规模的应用程序,使用关系型数据库(MSSQL)。经过大量阅读后,我决定要考虑使用MongoDB而不是MSSQL,主要原因是性能和规模问题。
我阅读并研究了Mongo,但无法找到以下问题的答案:
1. 我们是否应该这样做?请注意,我们有时间投入,唯一的问题是“对我们有好处吗?” 2. 如何建立我们的数据模型?
我的问题是,在我们的数据库中有很多一对多的关系。在阅读了this great post(以及second part)之后,我意识到一个好的实践是将决策分为3种情况:
1. 一对少数 2. 一对多 3. 一对很多。
在我们的数据库中,大多数情况下我们使用一对多,但问题是大多数情况下它是相同的“一”。 例如,我们有用户和交易表。每个用户都可以执行交易,因此我应该将用户建模如下: { "name": "John", ..., "Transactions" : [ObjectId("..."), ObjectId("..."),...] } 到目前为止还好,问题是我们有更多不仅仅是交易的内容,例如我们可能会有:帖子、请求和许多像交易这样的功能,然后我的用户集合变得非常庞大(超过25个“列”)。而且当我想要检索数据集时,我必须进行几个查询,不像MSSQL,我只使用Join语句。 另一个问题是我将不得不保存大量的额外数据,例如,对于每个交易,我必须保存终端ID,在报告中我将不得不显示终端名称,在这种情况下(据我所知),我有两个选择,一个是进行2个查询,另一个是也保存终端名称。在关系型数据库中,这是一个简单的连接。 因此,也许对于像我们这样的方案,Mongo(或任何其他基于文档的DB)不是最好的选择?
我阅读并研究了Mongo,但无法找到以下问题的答案:
1. 我们是否应该这样做?请注意,我们有时间投入,唯一的问题是“对我们有好处吗?” 2. 如何建立我们的数据模型?
我的问题是,在我们的数据库中有很多一对多的关系。在阅读了this great post(以及second part)之后,我意识到一个好的实践是将决策分为3种情况:
1. 一对少数 2. 一对多 3. 一对很多。
在我们的数据库中,大多数情况下我们使用一对多,但问题是大多数情况下它是相同的“一”。 例如,我们有用户和交易表。每个用户都可以执行交易,因此我应该将用户建模如下: { "name": "John", ..., "Transactions" : [ObjectId("..."), ObjectId("..."),...] } 到目前为止还好,问题是我们有更多不仅仅是交易的内容,例如我们可能会有:帖子、请求和许多像交易这样的功能,然后我的用户集合变得非常庞大(超过25个“列”)。而且当我想要检索数据集时,我必须进行几个查询,不像MSSQL,我只使用Join语句。 另一个问题是我将不得不保存大量的额外数据,例如,对于每个交易,我必须保存终端ID,在报告中我将不得不显示终端名称,在这种情况下(据我所知),我有两个选择,一个是进行2个查询,另一个是也保存终端名称。在关系型数据库中,这是一个简单的连接。 因此,也许对于像我们这样的方案,Mongo(或任何其他基于文档的DB)不是最好的选择?
- 我知道这些是新手问题 :)
- 我们在服务器端使用c# (ASP.Net Web API)
提前感谢!