`

大数据量的存储分表

 
阅读更多

 

 

参考财务帐套都是按年度的,有专门的设计规范。

 

帐套就是把数据分开保存的一个标志了
比如帐套表

ztid  zt
1    2002年帐套
2    2003年帐套
3    2004年帐套


根据这个把数据分类。也就是说所有的数据必须指定所属帐套。帐套即存储在电子计算机存储设备或介质中的用以记录一套帐务数据用的电子计算机电子文件的集合.

   故在设计时主要考虑:
1、在技术上实现数据据的自动建立功能;
2、在用户需求方面考虑:
   a)系统服务器参数配置;
   b)数据库参数配置;
   c)业务信息参数配置;

 

 

 

当一个应用的数据量大的时候,我们用单表和单库来存储会严重影响操作速度,如mysql的myisam存储,我们经过测试,200w以下的时候,mysql的访问速度都很快,但是如果超过200w以上的数据,他的访问速度会急剧下降,影响到我们webapp的访问速度,而且数据量太大的话,如果用单表存储,就会使得系统相当的不稳定,mysql服务很容易挂掉。所以当数据量超过200w的时候,建议系统工程师还是考虑分表.

 

以下是几种常见的分表算法。

 

1.按自然时间来分表/分库;

 

如一个应用的数据在一年后数据量会达到200w左右,那么我们就可以考虑用一年的数据来做为一个表或者库来存储,例如,表名为app,那么2010年的数据就是app_2010,app_2011;如果数据量在一个月就达到了200w左右,那么我们就可以用月份来分,app_2010_01,app_2010_02.

 

2.按数字类型hash分表/分库;

 

如果我们要存储用户的信息,我们应用的注册量很大,我们用单表是不能满足存储需求的,那么我们就可以用用户的编号来进行hash,常见的是用取余操作,如果我们要分30张表来存储用户的信息,那么用户编号为1的用户1%30=1,那么我们就存在user_01表里,如用户的编号为500,那么500%30=20,那么我们就将此用户的信息存储在user_20的表里.

 

3.按md5值来分表/分库;

 

我们假设要存储用户上传的文件,如果上传量大的话,也会带来系统的瓶颈问题,我们做过试验,在一个文件夹下如果超过200个文件的话,文件的浏览效率会降低,当然,这个不属于我们本文讨论的范围,这块也要做散列操作.我们可以用文件的用户名来md5或者用文件的md5校验值来做,我们就可以用md5的前5位来做hash,这样最多我们就可以得到5^5=3125个表,每次在存储文件的时候,就可以用文件名的md5值的前5位来确定这个文件该存那张表.

 

4.实例:某微博的url加密算法和存储策略的猜想.

 

现在好多微博都用这样的url来访问,如果他们的域名为www.example.com,那么如果你发微博的时候,你会发现你所发的url都变成了http://t.cn/Mx4ja1,这样的形式,他们是怎么进行这样的转换呢?我猜想就是用到了我们上面讲的md5的存储和查找规则,用你发的url来进行md5,得到md5值之后,如我们例子来说,就会用前6位来进行分表.

 

5.分表所带来的问题.

 

分表也会带来一系列的问题,如分页的实现,统计的实现,如果我们要做一个所有数据的分页,那么我们得每张表都得遍历一遍,这样访问效率会很低下.之前我尝试过用mysql的代理来实现,最终用tcsql来实现了.

 

6.分表算法的选择.

 

首先,分表适合于没有大的列表的应用来使用,要不然,会为这部分做好多额外的工作,如果你的应用数据量不是特别大的话,最好别用分表。呵呵,以前在做项目的时候,一项目经理要我们设计了一个千万级别的分表算法,而应用的pv不会超过100,总有点大炮打蚊子的感觉,而且因为分表,把整个项目的工期拖延了不少,得不偿失。

分享到:
评论

相关推荐

    MSSQLServer数据库大量数据按月份分表、存储过程指定时间段跨表分页查询

    比较完善的大量数据分表功能代码,包含创建数据库、生成数据、测试结果。适合初学分表者使用。 数据按照每个月创建一个数据表,通过存储过程输入参数,按照指定日期跨表查询数据,并且可以分页查询。

    数据分库分表之二叉树分库分表

    ### 数据分库分表之二叉树分库分表 #### 一、引言与背景 随着互联网技术的快速发展及用户需求的激增,单一...对于需要处理大量数据的企业而言,合理设计并实施二叉树分库分表方案,能够显著提升系统的性能和稳定性。

    Mybaits-plus优雅的实现多数据源及分表

    在IT行业中,数据库管理和优化是至关重要的环节,尤其是在大数据量的场景下。本文将深入探讨如何使用MyBatis-Plus优雅地实现多数据源及分表策略,为系统的高效运行提供支持。 首先,多数据源是指在一个应用中同时...

    分表_利用python进行数据表分表_

    5. **优化与性能**:在处理大量数据时,可以考虑使用chunksize参数分块读取大文件,以减少内存占用。另外,可以使用`to_parquet()`或`to_csv()`将数据保存为更高效的格式,如Parquet或CSV。 6. **错误处理和日志...

    spring动态数据源+mybatis分库分表

    在现代企业级应用中,随着数据量的增长,单表存储可能会遇到性能瓶颈,这时就需要引入分库分表的策略来优化数据库的性能。"spring动态数据源+mybatis分库分表"是一个针对大型数据库场景的解决方案,它利用Spring框架...

    超大数据量存储常用数据库分表分库算法总结

    在应对超大数据量存储时,数据库分表分库是一种有效的解决方案,它能够提高查询效率,增强系统的稳定性。本文主要介绍了三种常见的分表分库算法,并探讨了分表带来的问题及选择算法的考量因素。 首先,按照自然时间...

    分库分表,多数据源的切换

    总之,分库分表和多数据源切换是解决大数据量场景下的重要手段。Sharding-JDBC作为优秀的开源框架,为开发者提供了便捷、高效、灵活的解决方案。通过学习和实践SSMDemo,我们可以更好地理解和掌握这一技术,从而优化...

    Node.js 实现的 MySQL 分表分库中间件,用于海量数据的分布式集群储存管理和高并发访问。.zip

    分表分库(Sharding)是解决大数据量和高并发问题的一种常见策略。通过将单一的大表拆分为多个小表,分散到不同的数据库服务器上,可以显著提升查询效率,降低单个节点的压力,提高系统的整体性能和可用性。在Node....

    数据库分库分表

    数据库分库分表是应对大数据量和高并发场景下的重要技术策略,旨在提高数据库系统的性能、可用性和可扩展性。随着互联网应用的发展,单个数据库往往难以承受日益增长的数据量和用户访问压力,这时就需要采用分库分表...

    数据库分库分表存储分析思路

    数据库分库分表存储是解决大数据量存储的有效方法之一,但是它也存在一些问题,例如join操作问题、事务问题、成本问题等。为了解决这些问题,需要选择合适的分库或分表方法。 分库 分库是将不同的业务数据分散存储...

    hibernate-分表插件实现思路

    在IT行业中,数据库分表是一种常见的优化策略,用于解决大数据量带来的性能问题。本文将深入探讨如何使用Hibernate作为ORM框架,结合Spring,实现一个自定义的分表插件。这个插件提供了一种灵活的策略定义方式,适用...

    MySQL分库分表技术

    在这种背景下,MySQL的分库分表技术应运而生,旨在解决高并发、大数据量场景下的性能挑战。本篇将深入探讨分库分表的原理、应用场景以及实现策略。 **一、为什么要进行分库分表** 1. **性能提升**:当数据库中的...

    Java+Springboot+mybatis+sharding jdbc 实现分库分表

    通过以上步骤,开发者可以利用Java、SpringBoot、MyBatis和ShardingJDBC的组合,构建出一个高效、可扩展的分库分表系统,满足大数据量下的高并发访问需求。在项目"shardingdemo"中,可以详细查看这一过程的具体实现...

    springmvc分库分表实际例子

    在IT行业中,数据库扩展是解决高并发、大数据量场景下的常见策略,而“分库分表”正是其中一种有效的手段。本示例“springmvc分库分表实际例子”提供了一个基于SpringMVC实现的实战项目,旨在帮助开发者了解如何在...

    hibernate动态分表

    【hibernate动态分表】是一种数据库设计策略,主要用于处理大数据量的问题,通过将数据分散到多个物理表中,以实现水平扩展,提高查询效率,减轻单表的压力。在Java Web开发中,Hibernate作为一款流行的ORM(对象...

    msyql分表sql,导入即可

    MySQL数据库在处理大数据量时,为了提高查询性能和负载均衡,常常采用分表(Sharding)策略。这里的“msyql分表sql,导入即可”指的是利用特定的SQL语句来实现MySQL数据库的分表操作,并且这些SQL脚本可以直接导入到...

    Python与MySQL分表分库实战

    随着数据量的增长,单一数据库可能会面临性能瓶颈,如查询速度慢、响应时间长等问题。分库(Sharding)是将一个大数据库分成多个小数据库,每个库负责一部分数据,以减轻单个数据库的压力;分表(Partitioning)则是...

    mysql高可用分库分表.pdf

    通过水平分表可以将数据分散存储,避免单表数据量过大导致的性能问题,如IO争抢和锁表的几率。水平分表能够有效地提升查询效率,尤其是在数据分布均匀的情况下效果更佳。然而,水平分表依然存在单表数据量过大的问题...

    大数据表的分表处理设计思想和实现(MySQL)

    1. **性能提升**:大型表在执行SQL时,由于数据量大,索引扫描和数据读取都会变慢,分表可以将数据分布到多个物理存储上,加快查询速度。 2. **负载均衡**:通过分表,可以将数据分散到多个服务器,实现负载均衡,...

    分库分表自动建库表小工具

    在IT行业中,数据库管理是至关重要的,特别是在大数据量的情况下,分库分表是一种常见的优化策略。这个名为"分库分表自动建库表小工具"的程序正为此目的而设计,它能帮助开发者自动化地创建分布式数据库架构。下面将...

Global site tag (gtag.js) - Google Analytics