【问题标题】:what would be a good database schema for an extremely simple chat in NoSQL?对于 NoSQL 中极其简单的聊天,什么是好的数据库模式?
【发布时间】:2019-03-28 06:43:25
【问题描述】:

在 SQL 的基本架构上有一个很好的 existing answer

我能理解,很简单。我们有一个 user 表、一个 chat 表和一个 chat_line 表(在正常情况下将被称为 messages)。

我对 NoSQL 比较陌生,我的头脑仍然习惯于“正常”的 SQL 方案,我试图了解 NoSQL 中聊天应用程序的正确模式(如 mongo 或 whathaveyou) .

我说的是最简单的形式,一个用户与另一个用户之间,没有什么特别的 - 没有文件消息,没有图片,没有群聊。只是文字。

【问题讨论】:

  • 没有nosql这样的东西。 nosql 是一组不是 sql 的数据库。即所有其余部分。所以女巫之一。如果您了解 1、2、3 范式,则可以将其应用于任何数据,另请参阅 CAP 理论和一致性模型。
  • 取决于您要建模的内容。
  • NoSQL 跨越了很多不同的数据库,我们可以假设你想使用像 Mongo 这样的 JSON 格式的东西吗?基于此,我可以为您提供答案

标签: nosql chat


【解决方案1】:

NoSQL 不是一个单一的标准。引用something out of MongoDB's website

NoSQL 数据库通常属于以下四类之一:

  • 键值对存储
  • 宽柱式商店
  • 文档数据库
  • 图形数据库

我是 Firebase 的忠实粉丝,realtime databaseCloud Firestore 如果您已经确定要使用非关系数据库构建它,我强烈建议您研究一下。

对于 Cloud Firestore,您可以遵循在构建 MongoDB 时获得的大部分建议。这是一个带有类型字段的无模式数据库。非常容易使用。

有很多关于使用 Firebase 实时数据库构建聊天的材料。

您还可以在这里找到一堆关于与 Firebase 建立聊天的帖子:

【讨论】:

  • 感谢您提供有用的链接。我没有奖励赏金,因为这是大量的资源,但实际上并不能回答我的问题。尽管如此,你还是得到了支持和我的感激:)
  • re:您的友好聊天网络链接,github.com/firebase/codelab-friendlychat-web/blob/master/… 有一些很好的代码可以窃取用于构建 Firebase 数据库。例如第 53 到 63 行
【解决方案2】:

正如其他人指出的那样,NoSQL 是一个通用术语,指的是传统关系数据库的任何替代方案,其中数据放置在表中,并且在构建数据库之前仔细设计了数据架构。

您在问题中提到了 Mongo...MongoDB 是 无模式。您可以做的是创建您自己的与 Mongo 数据库实例交互的类,并在该类中定义数据需要遵守的规则。

如果您使用的是 node.js,您可以安装 Mongoose,它允许您通过提供一个直接的、基于模式的解决方案来为您的数据建模,从而以面向对象的方式与数据库进行交互。

这是一个非常简单的示例,说明如何在 Mongoose 中定义聊天模式,它并不意味着是一个完整的模式,它只是一个开始,希望能让你开始实现你需要的东西:

var chatSchema = new Schema({
    chatSession: { type: Number, index: true },    
    user: { type: String, default: 'anonymous' },
    chatLineText: { type: String },
    dateTime: { type: Date, default: Date.now },
});

var chatModel = mongoose.model('Chat', chatSchema);
var chatLine1 = new chatModel({
    chatSession: '2133123',
    user: 'someUserName',
    chatLineText: 'Hello yuvi!'
});

chatLine1.save(function (err, chatLine) {
    if (err) console.log(err);
    else console.log('following chatLine was saved:', chatLine);

【讨论】:

  • 这是一个关于如何使用 MongoDB + Mongoose 制作聊天应用程序的教程:dzone.com/articles/…
  • 感谢您的详细解释。正如我所说,NoSQL 对我来说是新的,所以我什至不明白有这么多不同的类型(因为 SQL 变体有一些差异但基本概念是相同的,所以我的想法是一样的)。跨度>
  • 让我感到困惑的是,user 的部分 - 我是否将我的用户保存在 chatSchema 中?那里的String 字段基本上像ForeignKey 一样运作吗? mongo 是如何知道如何获取相关用户信息的?
  • @yuvi - MongoDB 有两种类型的关系:嵌入或引用。这篇文章让您对差异有一个很好的看法:stackoverflow.com/questions/5373198/…,如果您使用 mongoosejs,请查看 Populate:mongoosejs.com/docs/populate.html
  • @yuvi - 这篇文章中的链接是了解 NoSQL 是什么以及如何根据您的需要选择合适的 NoSQL 数据库的一个很好的起点:stackoverflow.com/questions/5689091/…
猜你喜欢
  • 2018-05-29
  • 2017-10-23
  • 2011-03-06
  • 2012-04-14
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多