我使用django 1.11
和postgresql作为数据库。我知道如何存储和检索数据库中的数据,但我找不到一个示例,它是存储和检索两个用户的整个讨论的正确方法。
这是我的简单想法:
两个用户连接到127.0.0.1
,在此页面中有一个文本区域表单。两个用户都可以写入文本区域,并按下按钮发布他们的内容。该页面将重新加载,现在正在显示所有消息。
我想知道的是,如果存储和检索的正确方法是:
one db row => single message user
如果两个用户交换,比如15个消息,它将存储15行并进行单一讨论,我可以将另一列放入db中,类似于讨论“id”,因此15行将具有相同的id和用户:
db row1 ---> "pk=1, message=hello there, user=Mike, id=45")
db row2 ---> "pk=2, message=hello world, user=Jessy, id=45")
当django中的页面重新加载时会运行:
discussion = Discussion.objects.all().filter(id=45)
检索讨论。
只有两个用户可以私下讨论,所以每两个用户都有一个讨论页面,如127.0.0.1/one,127.0.0.1/two等等。
如果这是从db存储和检索的正确方法,我的问题是如何扩展?我是否可以依靠该设计有效地存储和检索数据库中的数据,或者在不久的将来会很重?我担心1000个用户可以快速增长到10000行。
答案 0 :(得分:1)
三项建议:
这会回答你的问题吗?
答案 1 :(得分:1)
因此,您的问题的答案取决于您计划将来如何使用数据以及您需要如何处理数据。完全可以将诸如Postgres之类的列式数据库中的N个用户之间的整个会话存储为每个消息的单独记录。但是,与所有编程问题一样,有多种范例可以回答您的问题。我将在这里探讨其中几个人的利弊(知道肯定会有更多)。
范例1 每条消息的新记录(行)
优点:
缺点:
范例2 每次对话的新记录(行)
优点:
缺点:
哪个最好? YMMV
同样,您可能有六种以上的方式存储应用程序的消息,这些都取决于您的下游需求。另外,我想让你看看专门从事消息发布的Apache Kafka等项目可能是一个可扩展的解决方案。