共同耗用材料分配表
内容调整:
1. 随着业务的持续发展和数据的不断累积,数据库中的数据量逐渐变得庞大,这给CRUD操作带来了巨大的性能压力。例如,当表数据量达到千万级别时,一分钟的查询操作可能耗费两分钟的时间才能完成,这无疑给业务操作带来了极大的不便。
2. 为了解决因数据量过大导致的数据库性能下降问题,我们采用了分库分表的技术手段。通过将独立的数据库拆分成多个数据库,或者将大表拆分成多个小表,可以使单一数据库、单一数据表的数据量变小,从而提升数据库的整体性能。
3. 针对性能问题,我们提供了多种解决方案。
方案一:通过提升服务器硬件能力来增强数据处理能力。这包括增加存储容量、提升CPU性能等。这种方法成本较高,并且当MySQL本身的性能成为瓶颈时,仅靠硬件升级可能无法解决根本问题。
方案二:将数据分散到不同的数据库中。这样可以使单一数据库的数据量变小,从而缓解单一数据库的性能压力。这种方案包括垂直分表、垂直分库、水平分表和水平分库等多种实现方式。
(一)垂直分表与分库
垂直分表是将一个表按照字段拆分成多个表,每个表存储其中一部分字段。而垂直分库则是将表进行分类,分别部署在不同的数据库上面,每个库放在不同的服务器上。这样可以使得业务清晰,便于管理和维护。
(二)水平分表与分库
水平分表是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。而水平分库则是把同一个表的数据按一定规则拆到不同的数据库中。这两种方式都可以优化单一表数据量过大而产生的性能问题。
对于水平分表的方式,我们有Hash取模分表、数值Range分表以及一致性Hash算法等多种实现方法。每种方式都有其优缺点,适用于不同的场景。
我们也需要注意分库分表带来的问题,如需要确定所需数据在哪个库或表中,这增加了系统的复杂度。当应用难以再进行垂直切分时,或者垂直切分后单库读写存储成为性能瓶颈时,我们可以考虑使用水平分库。
4. 为了解决分布式事务的问题,我们提供了多种解决方案。包括使用分布式事务管理、由应用程序和数据库共同控制事务等。其中,后者又分为分解大事务为小事务、使用两次查询等方法。
5. 关于主键自增策略的实现,我们提供了多种解决方案。例如,可以使用UUID作为主键,但这样会占用大量的存储空间。我们还可以维护一个Sequence表来记录每张表的下一个ID是多少。也有更复杂的解决方案如的分布式自增ID算法Snowflake。
6. 在进行数据库设计和操作时,我们还需要考虑数据库的读写分离、双机热备等功能。ShardingSphere等中间件可以帮助我们更好地管理和利用关系型数据库的计算和存储能力。
7. 关于具体配置和使用ShardingSphere-JDBC等工具时,我们可以参考官方文档和示例代码。例如,配置pom.xml、application.properties等文件,以及编写mapper和启动类等代码。