对于像Wufoo这样的应用程序,使用关系数据库或基于文档的数据库会更好吗?

时间:2010-03-14 20:56:58

标签: mysql mongodb couchdb document-based database

我正在开发一个类似于Wufoo的应用程序,它允许我们的用户创建自己的数据库并使用自动生成的表单和视图收集/显示记录。

由于每个用户都在创建一个不同的模式(一个用户可能拥有他们的棒球卡集合的数据库,另一个用户可能拥有他们的食谱数据库)我们当前的方法是使用MySQL为每个拥有自己的表的用户创建单独的数据库。换句话说,MySQL服务器包含的数据库如下所示:

main-web-app-db(我们的网络应用程序包含用户帐户信息,账单等表格) user_1_db(baseball_cards_table)
user_2_db(recipes_table)
....

等等。如果用户想要设置一个新数据库来跟踪他们的DVD集合,我们将使用“create table ...”进行“创建数据库...”。如果他们输入了一些数据,然后决定他们想要更改一个列,我们就会做一个“改变表......”。

现在,我越是开始构建它,看起来MySQL似乎不太适合处理它。

1)我首先关注的是,每次请求切换数据库,首先是我们的主应用程序数据库进行身份验证等,然后切换到用户的个人数据库,效率会很低。

2)我的第二个问题是,单个MySQL服务器可以托管的数据库数量会受到限制。假装这个应用程序有500,000个用户数据库,MySQL是否设计为以这种方式运行?如果它是一百万或更多呢?

3)最后,这种方法是支持和扩展的噩梦吗?我从来没有听说过以这种方式使用MySQL,所以我担心这会影响复制和其他缩放方法。

对我而言,似乎MySQL不是以这种方式使用而构建的,但我知道什么。我一直在研究像MongoDB,CouchDB和Redis这样的基于文档的数据库作为替代方案,因为看起来这种特定问题的无模式方法很有意义。

有人可以就此提出一些建议吗?

2 个答案:

答案 0 :(得分:2)

由于您要将模式留给您的用户来决定,因此使用强制您定义模式的关系数据库是没有意义的。

使用NoSQL数据库。在堆栈溢出上做更多的阅读。

What is NoSQL, how does it work, and what benefits does it provide?

Pros/Cons of document based database vs relational database

What is the best Document-oriented database?

答案 1 :(得分:1)

像你描述的那样动态创建表是一个非常糟糕的主意。支持架构更改将是一场噩梦。每当有人添加或删除一个字段时,你必须运行一个ALTER TABLE ...命令,如果表中有数据,这不是一个快速的操作,因为它基本上创建了一个带有新的scehma的新表并移动所有数据到了新的。不要走那条路。

你可以在没有太多工作的情况下在MySQL之上实现某种键/值存储,或使用Friendly之类的东西,但是寻找合适的文档数据库可能是一种更简单的方法。

MongoDB将是我的选择,但有很多事情要考虑,其他人可能会说Cassandra会更好。使用MongoDB非常容易,使用它对使用SQL数据库非常熟悉。它的索引或多或少相同,查询也没有太大的不同。但最好的方法可能是您不需要ORM,您的对象或多或少地存储在数据库中。读取和写入可以非常接近金属,而不需要对物体进行大量的映射。