数据分流
通过将非结构化数据和历史数据分别分流到HBase、Greenplum和TFS, MySQL
中只储存主数据和在制品(正在制造,未交付给客户的产品)的事务性数据,已经
大大减少生产数据库MySQL要存储的数据量。但是,为了进-步提高性能和吞吐
量,我们还需要使用MyCAT对MySQL进行分片。
分片决策:
分片的最高原则是:绝不允许跨分片关联(例如分片A中的一行数据的一个外键列关联到分片B中的一-行数据的主键列),但允许跨分片聚合(从多个分片中获取数据,聚合为- 个总数据集返回给用户)
暂定以生产单元(各个生产公司)作为分片依据。如果每个公司的规模不均匀,可能要选择其他的分片字段,例如产品条码。
主数据存储于每台分片服务器上,不同生产单元的事务性数据保存在不同的分片服务器上。因为事务性数据关联主数居,这样的设计可以使得关联可以局限在分片内部。
主从表(例如订单表和订单条目表)中的数据行必须划分到同一个分片,以消除跨分片关联的需要。
分片中最重要的决策是为每个数据表选择分片字段。在不允许跨分片关联的前提下,让数据尽可能均匀地分布在多个分片服务器上,而且当未来数据规模增长时,能够比较容易地通过增加更多的分片服务器来扩展系统的存储能力。
总结
改进建议总结如下:
将单一数据库拆分为物料、库存、设备、工艺、品质和生产五个独立的
数据库以降低并发压力。提供自动化封装,使得分库对开发入员透明。
将单一数据库拆分为物料、库存、设备、工艺、品质和生产五个独立的
数据库以降低并发压力。提供自动化封装,使得分库对开发人员送明。
对生产数据库中的大表进行分片以降低并发压力。建议按产品码分片。
冗余存储关联表的不安字段。
冗余存储计算字段。
通过全文检索,根据要宣询的关联表的字段反宣到其ID,然后根据这个
ID在当前表中进行单表查询。
根据外键D,全文检索到关联表的其他字段,呈现给用户。
用全文检索取代模糊查询。
通过缓存加速查询速度。
用事件驱动的方式处理大粒度事务。
离线报表用Hive + Spark实现。
实时报表用Spark即时计算出来。