gpt4 book ai didi

firebase - 为聊天应用程序构建 NoSQL 数据库(使用 FireBase)

转载 作者:行者123 更新时间:2023-12-04 08:48:00 25 4
gpt4 key购买 nike

多年来使用关系数据库,我正在尝试使用 FireBase 开发一个非常基本的聊天/消息应用程序

FireBase 使用使用 JSON 格式字符串的 NoSQL 数据结构方法。

我做了很多研究,以了解如何在考虑性能的情况下构建数据库。我试图“非规范化”结构并最终得到以下结果:

{

"chats" : {

"1" : {
"10" : {
"conversationId" : "x123332"
},
"17": {
"conversationId" : "x124442"
}
}
},

"conversations" : {

"x123332" : {

"message1" : {

"time" : 12344556,
"text" : "hello, how are you?",
"userId" : 10
},
"message2" : {

"time" : 12344560,
"text" : "Good",
"userId" : 1
}
}
}
}

数字 1、10、17 是示例用户 ID。

我的问题是,这可以以更好的方式构建吗?目标是随着应用程序用户的增长而扩大规模,并仍然获得最佳性能。

最佳答案

使用 面向文档的数据库结构这样的Firestore,您可以存储如下对话;

{
"chat_rooms":[
{
"cid":100,
"members":[1, 2],
"messages":[
{"from":1, "to":2, "text":"Hey Dude! Bring it"},
{"from":2, "to":1, "text":"Sure man"}
]
},
{
"cid":101,
"members":[3, 4],
"messages":[
{"from":3, "to":4, "text":"I can do that work"},
{"from":4, "to":3, "text":"Then we can proceed"}
]
}
]
}

您可以运行此结构的 NoSQL 查询示例很少。

Get all the conversations of a logged-in user with the user id of 1.


db.chat_rooms.find({ members: 1 })

Get all the documents, messages sent by the user id of 1.


db.chat_rooms.find({ messages: { from: 1 } })

上述数据库结构也可以在 RDMS 数据库中实现为使用 MySQL 或 MSSQL 的表关系。这也可以用于群聊室应用程序。

这种结构经过优化,可以减少您的数据库文档阅读使用量,从而可以节省您为基础设施支付更多费用的资金。

根据我们上面的例子,由于我们有 4 条消息,您将获得 2 个文档读取,但是如果您单独存储所有消息并通过过滤发件人 ID 运行查询,您将获得 4 个数据库查询,当您在您的数据库中有大量对话记录。

关于firebase - 为聊天应用程序构建 NoSQL 数据库(使用 FireBase),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35969715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com