我在做舰队管理工作。我在具有以下列的location表上有大量的写操作
在这里,这个表将每3秒进行一次写操作。因此,它将有数百万的记录。因此,为了检索更快的数据,我正在计划分区。现在我的问题是:-
将会有数万亿的记录
@rc-谢谢man..what,我每隔3秒插入一次数据,所以每次插入data...so时都要运行一个检查过程,那么性能呢?
2>I想用分区列作为车辆no.....is的任何替代方式.
发布于 2009-10-08 11:43:40
读:MySQL分区限制
1.)分区表不支持FKs。
2.)用于分区的列将取决于访问表的方式。如果您的查询总是基于vechicle .,那么在该列上执行散列分区可能是有意义的。如果您正在查询或报告更多类似“本月添加了哪些车辆”之类的内容,或者希望在某一年龄时将分区“滚动”出去,那么按日期分区可能是可行的方法。这是你必须根据你的使用来决定的事情。
3.)有关更多信息,请参见上面的链接。
基于用户问题的编辑:
每3秒插入一个记录并不是很大的吞吐量。确保您的用户表上有一个主键,以便有效地完成过程中的检查。(即使支持FKs,这也是事实)如果您支持FK,DB将在幕后为您进行检查,所以从这个意义上说,它不会伤害您。如果检查最终成为瓶颈,您可能会觉得有必要删除它,并可能将错误的用户is报告为夜间批处理过程,但是如果您是用户表相对较小且索引正确,我不认为这是一个问题。
另一种选择是使用分区或非分区表手动进行分区(即分块)。当然,对于非分区表,您可以使用本机外键。例如,您可以将您的vehicles表拆分成多个表,如:(假设您希望使用vehicleNo作为“键”)。
VehiclesNosLessThan1000
VehiclesNosLessThan2000
VehiclesNosLessThan...
VehiclesNosLessThanMAX
在这里,您可能希望再次获得一个SP,这样应用程序/用户就不必知道这些表了。SP将负责根据传入的vehicleNo插入/更新正确的表。您还需要一个SP来选择数据,这样应用程序/用户就不必知道要从中选择的表。为了方便地访问所有数据,您可以创建一个将所有表合并在一起的视图。
注意,这样做的一个好处是,当前MyISAM在更新期间锁定了整个分区表,而不仅仅是它正在更新的分区。通过这种方式对表进行切分可以缓解这种争用,因为表本身就是“分区”。
基于您所做的有限数据,我可能会编写两个存储过程,一个用于选择数据,一个用于更新/插入数据,并让应用程序使用这些存储过程进行所有访问。然后,我将首先在vehicleNo上尝试通过散列进行常规分区,同时在过程中强制使用user_id键。如果这成为一个问题,您可以轻松迁移到跨多个表对数据进行切分,而不必更改应用程序,因为关于如何检索和更新数据的所有逻辑都包含在SPs中。
https://stackoverflow.com/questions/1537219
复制相似问题