将关系数据库转换为couchDB(noSQL)



我目前正在开发与NodeJS和 socket.io 的网络聊天。我需要一些帮助才能将一些关系数据库结构转换为NoSQL。我对NoSQL世界很陌生,这就是我在这里问这个问题的原因。

我的目标是存储用户及其注册的聊天室,以便列出特定聊天室中的所有用户。

在SQL中,我会做这样的事情:

--Users
John        
Jack        
James       
--Room
Javascript
PHP
CSS
--Relation
Jack  |  PHP
Jack  |  CSS
John  |  PHP
James | Javascript

然后select user from relation where room like 'PHP'

我如何使用 couchDB 实际执行此操作?我需要存储、列出和删除。用户是唯一的,房间也是,但用户可以在多个房间中。当用户断开连接时,应在所有位置将其删除。如果用户离开了房间,则应将其从该房间中删除。如何选择房间"PHP"中的所有用户?

我认为您不应该将信息保存在数据库中。房间应该是内存中包含用户 ID 数组的键。当用户进入房间时,将项目推送到阵列并在他离开时弹出它。仍然要说明一些概念,这里有你可以用couchdb做什么

创建这样的文档

 {
     "user" : "scope77",
      "room" : "php"
}

现在,由于您希望按他们所在的房间获取所有用户,因此创建一个视图,该视图按房间为用户编制索引,如下所示

    function(doc){
   if(doc.room)
   emit(doc.room,doc)
}

现在,对此视图的调用将返回特定房间中的用户列表。

curl http://localhost:5984/db_name/design_name/view_name?key="php"

就是这样。这里要记住的一件事是,在关系模型中,您可能已经为聊天室和用户创建了单独的表,并引用它们以使数据规范化。在沙发数据库中,虽然您可以链接文档,但通常更容易,甚至更喜欢重复和非规范化的数据。

因此,即使您可以为房间创建一个单独的文档,最好将房间名称与用户文档一起存储。