我习惯使用mysql,但对于我的下一系列项目,CouchDB(NoSQL)似乎是要走的路,基本上是为了避免在mysql中使用EAV并拥抱它提供的所有酷炫功能.
经过大量的调查和阅读文档等,有一件事我似乎不太了解.
让我们假设我在我的服务器上托管了三个Web应用程序,因此需要三个数据库.例如,一个是带有产品和发票表的网上商店,一个是带有文章和评论表的博客,另一个是带有游戏统计表的基于网络的游戏(显然简化).
所以我在一个mysql安装上托管多个站点,我在服务器上运行的每个应用程序都有自己的数据库,包含表,字段和内容.
现在,有了CouchDb,我想做同样的事情.问题似乎是在CouchDb中创建数据库更像是在mysql中创建表.也就是说,我为我的博客创建了名为"评论","文章"等的数据库,在内部我根据文章创建了一个文档或每个评论的文档.
所以我的问题是:如何在一个CouchDB安装中将我的数据与多个Web应用程序分开?
我想我在这里做了一些根本错误的事情,但希望你们其中一个人可以帮我走上正轨.
在CouchDB中,没有明确需要将不相关的数据分成多个数据库.如果您已正确构建文档和视图,则只会在查询中显示相关数据.
如果您决定将数据分成单独的数据库,只需创建一个新数据库即可.
$ curl -X PUT http://localhost:5984/somedb
{"ok":true}
Run Code Online (Sandbox Code Playgroud)
根据我对couchdb的经验,将不相关的数据分离到不同的数据库对于性能非常重要,也是一个明智的选择.视图生成是couchdb的一个痛苦部分.每次更新数据库时,都必须重新生成视图(将它们视为传统关系sql db中的索引).这涉及迭代数据库中的每个文档.因此,如果您说有200万个A类文档,并且您有300个类型的文档,那么您需要重新生成查询类型B的视图,然后在视图生成期间执行所有200万和300个枚举.将花费很长时间(甚至可能会执行读取超时).
因此,在保持视图(如何在couchdb中查询,这是一个明显重要且不可避免的特性)更新时,拥有多个数据库是明智之举.