在mysql中扩展餐厅数据库

rbl8hiat  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(255)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

两年前关门了。
改进这个问题
我正在为一个应用程序设计一个后端,该应用程序将跟踪几个不同的餐厅及其订单历史记录。所以我一直在想最有效的方法。我想我想做的是为任何一家餐厅做一个通用设计,并在我们添加不同餐厅时创建一个新的数据库(如果那样做有什么问题,请告诉我)
我想弄清楚的是,我将如何为许多订单的餐厅存储特定的订单数据。我想用一个大表来记录所有订单,然后为每个订单创建一个单独的小表,详细说明订单内容、价格以及是否有折扣/优惠券。
我想在一个月内,一家餐厅可能会有数千份订单,因此,最终我会有几千张迷你餐桌,并有单独的订单。我也在考虑为所有订单准备一张满是每件商品的table,并在每个订单上附上一个订单id。但是我会有一个一个月有上万个条目的表格。
哪种方法最有效?当然,这两个实现想法可能都有点离题,所以我愿意听听其他想法!

l5tcr1uw

l5tcr1uw1#

当你不需要的时候,尽量不要为了性能而牺牲设计。只会造成不必要的麻烦。试着用bcnf或3nf这样的标准形式来设计你的实体。然后在你设计了你的实体,一切看起来都很好。
还有许多用于性能调整和扩展的解决方案。
首先是索引,通过索引,可以节省大量的计算能力。因为查询没有索引的数据库 O(n) 通过索引,你可以 O(log(n)) 甚至 O(1) 取决于您使用的索引算法。
下一个解决方案是对表进行分区。可以将其视为将表划分为多个表,但数据库对此进行了抽象,您只能看到一个表。
这两个解决方案可以帮助您在一台机器上调整性能。而扩展机器可以帮助您获得更好的性能。这方面有硬件限制。因此,如果你必须扩展,有复制和切分。
基本上,复制可以帮助您扩展读取查询。有一些复制解决方案可以扩展写查询,但它们并不是非常有效,因为它们必须在集群中的所有机器上写一件事。尽管它们是高可用性的完美解决方案。
因此,如果您达到这样一个级别,即您有太多的写入,以至于复制不再起作用。你可以去切分。切分有很多方面。分片应该在应用程序级还是数据库级进行?如何在机器之间划分数据?
对我自己来说,我更喜欢数据库级的分片(实际上我在生产中使用它)。因为应用程序级分片可能会使应用程序服务器代码变得复杂(因为您可能需要服务发现等),如果不小心处理,甚至会变得脏兮兮的。此外,这种抽象帮助开发人员将集群看作一个数据库,而不是许多分割的数据库。
用于在碎片之间划分数据。分为垂直分片和水平分片。
在垂直分片中,您将数据按实体(如一个数据库中的客户、另一个数据库中的订单等)划分。这应该是第一种方法,因为它比水平分片更容易实现。
在水平分片中,在多个数据库服务器之间划分一个实体。例如,您可以使用一个公式将行平均分割,就像id为奇数的行转到示例a,id为偶数的行转到示例b一样。
另一种方法是用一些常见的东西来划分它们,比如用餐馆来划分订单。
希望有帮助。如果你还有其他问题,我很乐意回答。

相关问题