我只是想通过重写一个非常简单的MySQL和PHP应用程序来玩NOSQL和Node.js,这样学生就可以给教授们留言:
Table: Prof
Columns: id, first, last, university, department
Table: Comments
Columns: id, user_id, likes, data
这种关系基本上是教授有很多评论和评论属于一位教授。
我认为CouchDB / JSON版本看起来像这样:
{ "Profs" : [{
"Comments" : [ {"data" : "comment1", "likes" : 42 } , { "data" : "comment2", "likes" : 1} ],
"first" : "Carlos",
"last" : "Marx",
"university" : "some university",
"department" : "math"
}, {...another prof with comments...}],
}
我的第一个问题是,是否有一个工具或脚本可以运行将我的所有数据导入CouchDB可以工作的东西?如果没有,你会推荐什么?我可以从phpmyadmin将它导出到.sql和.cvs。
我的第二个问题是我是否在JSON中正确构建了数据?
谢谢!
答案 0 :(得分:2)
您真的不只是将MySQL数据库导出到CouchDB或任何其他NoSQL数据库。它们是不同的范例,需要改变您对数据存储方式的思考方式。关系数据库和文档数据库都有很好的用例,虽然存在很多重叠,但它们在不同的方面都表现出色。
使用NoSQL数据库,了解如何使用数据非常重要。应用程序如何编写和使用数据以及数据是否经常更新都会对您设计文档的方式产生非常重要的影响。以你的例子为例。你能编辑评论吗?如何评论评论?你总是展示所有这些或者你想要分析结果吗?评论的频率是多少?他们可以被删除吗?在不知道其中一些问题的答案的情况下,我无法确定CouchDB是否是针对该问题的正确的NoSQL解决方案!
我很抱歉这是对您的问题的非直接回答,但是从关系数据库迁移到NoSQL解决方案作为从表到集合的简单映射是一种失败的方法。一旦您花时间设计文档在CouchDB中的外观,数据就必须经历转换过程。这可以采取多种形式。您可以编写一个可以从MySQL读取并写入CouchDB的应用程序,也可以导出到其他格式并导入脚本。没有魔法按钮可以将您的MySQL数据库转换为Couch数据库,如果存在,由于上述问题,它确实不应该存在。
答案 1 :(得分:2)
这是一篇经典博客文章+评论类型场景。
不是将整体JSON文档用于整个数据库,而是将注释和教授拆分为单独的JSON blob。我建议使用ids的电子邮件地址,因为它们是独一无二的,而且几乎每个人都拥有它们。使用CouchDB的include_docs功能将prof文档和评论文档链接在一起。
{
"_id": "carlos_marx@uni.de",
"university" : "Some Uni",
"department" : "Math",
"name" : "Carlos Marx"
}
{
"_id": "comment1",
"prof": "carlos_marx@uni.de",
"comment": "Very smart"
}