对于 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 可以找到。
- https://github.com/firebase/friendlychat-web
- https://codelabs.developers.google.com/codelabs/firebase-web/#0
您可能还会在这里找到一堆关于使用 Firebase 建立聊天的帖子:
- Structure a NoSQL database for a chat application (using FireBase)
在 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 可以找到。
- https://github.com/firebase/friendlychat-web
- https://codelabs.developers.google.com/codelabs/firebase-web/#0
您可能还会在这里找到一堆关于使用 Firebase 建立聊天的帖子:
- Structure a NoSQL database for a chat application (using FireBase)