我们正在创建一个新的Web应用程序,并打算使用CouchDB。旧的Web应用程序正在重写,我们正在从RDBMS迁移到CouchDB。我有一个包含10多个表的RDBMS架构,我想在CouchDB中重新创建相同的架构。在CouchDB中,哪种方法更好?
选项
1.在CouchDB中为RDBMS模式中的每个表创建一个新数据库
1.在CouchDB中只创建一个数据库,并将所有RDBMS表存储到该CouchDB中,该数据库具有一个名为doc_type/table_type的显式列,以表示它在RDBMS表中所代表的表/行类型。
这些方法的优缺点是什么?推荐的方法是什么?
1条答案
按热度按时间jgzswidk1#
那要看情况了。
一般来说,要警惕试图天真地将RDBMS模式“转换”到CouchDB --它很少以令人满意的方式结束。关系模式--如果设计良好--将被规范化并依赖于多表连接来检索数据。(可能)几乎没有被规范化,而是文档单元表示表中的一行,或者表示从关系DB中的连接返回的一行。
在CouchDB中,文档单元之上没有连接,也没有原子事务。当为CouchDB设计数据模型时,要考虑数据是如何被访问和更改的。你需要原子地访问的东西属于同一个文档。
对于多个数据库和单个数据库中带有“type”字段的文档,单个数据库选项允许您轻松地在整个数据集上执行map-reduce查询。如果您使用多个数据库,这是不可能的。因为map-reduce视图是严格针对每个数据库的。数据库的数量应该由访问模式决定--如果您的数据只被应用程序查询的一个子集访问过,并且永远不需要与其他数据一起切片,那么可以将其存放在单独的数据库中。
我还建议查看CouchDB和Cloudant中新的分区数据库工具。