2

我只是想通过重写一个非常简单的 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 构造了我的数据?

谢谢!

4

2 回答 2

3

这是一个经典的博文+评论类型的场景。

与其对整个数据库使用单一的 JSON 文档,不如将评论和 profs 拆分为单独的 JSON blob。我建议使用电子邮件地址作为 ID,因为它们是独一无二的,几乎每个人都有。使用 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"
}
于 2012-07-04T12:14:32.773 回答
2

您真的不只是将 MySQL 数据库导出到 CouchDB 或任何其他 NoSQL 数据库。它们是不同的范例,需要改变您对数据存储方式的看法。关系数据库和文档数据库都有很好的用例,虽然有很多重叠,但它们都擅长不同的事情。

对于 NoSQL 数据库,了解数据的使用方式非常重要。您的应用程序如何编写和使用数据,以及数据是否经常更新,这些都对您应该如何设计文档有非常重要的影响。例如在你的例子中。可以编辑评论吗?如何查看评论?您是总是显示所有这些还是希望对结果进行分页?添加评论的频率如何?它们可以被移除吗?在不知道其中一些问题的答案的情况下,我无法确定 CouchDB 是否是解决该问题的正确 NoSQL 解决方案!

很抱歉,这是对您问题的非直接回答,但是将关系数据库迁移到 NoSQL 解决方案作为从表到集合的简单映射是失败的原因。一旦您花时间设计文档在 CouchDB 中的外观,数据就必须经过转换过程。这可以采取多种形式。您可以编写一个可以从 MySQL 读取并写入 CouchDB 的应用程序,或者您可以导出为其他格式并通过脚本导入该格式。没有魔术按钮可以将您的 MySQL 数据库转换为 Couch 数据库,如果有,由于上述问题,它确实不应该存在。

于 2012-07-04T08:35:54.687 回答