对于 NoSQL 中极其简单的聊天,什么是好的数据库模式?

what would be a good database schema for an extremely simple chat in NoSQL?

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

我看得懂,很直接。我们有一个用户 table、一个聊天 table 和一个 chat_line table(在理智的世界中这将被称为消息)。

我对 NoSQL 比较陌生,我的头脑仍然习惯于 "normal" SQL 方案,我正在尝试了解什么是正确的方案用于 NoSQL 中的聊天应用程序(如 mongo,或诸如此类)。

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

正如其他人指出的那样,NoSQL 是一个通用术语,指的是传统关系数据库的任何替代方案,在传统关系数据库中,数据放在表中,数据模式在构建数据库之前经过精心设计。

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

如果您正在使用 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);

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

NoSQL databases typically fall into one of four categories:

  • Key-value stores
  • Wide-column stores
  • Document databases
  • Graph databases

我是 Firebase 的超级粉丝,realtime database and Cloud Firestore 如果您已经确信要使用非关系数据库构建它,我强烈建议您研究一下。

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

在使用 Firebase 实时数据库建立聊天方面,有很多 material 可以找到。

您可能还会在这里找到一堆关于使用 Firebase 建立聊天的帖子:

  • Structure a NoSQL database for a chat application (using FireBase)