不用分布式方式,处理大量数据的问题(2)

为啥分成两篇呢,原因有两个,

一个是,很多人不愿意看太长的文章,另一个原因是,我想多骗点积分。骗了积分没啥用,就是为了提升逼格。

上一篇说了根据需求,创建分表。

下面说,如何使用已经创建的分表。

想看下面的文章呢,先看看

CRC32

直接贴代码,用代码说话。

public static String shard(String tableName, int tableNumber, String DivisionType) {
        CRC32 crc = new CRC32();
        crc.update(DivisionType.getBytes());
        int iH1 = (int) (crc.getValue() / tableNumber);
        int iH2 = iH1 % tableNumber;
        String iH3 = Integer.toHexString(iH2);
        if (iH3.length() < 2) {
            iH3 = new StringBuffer(iH3).insert(0, "0").toString();
        }
        String sTableName = tableName + iH3;
        return sTableName;
    }

这个方法,需要传入3个参数,1、表名前缀,2、分表的数量,3、按照什么条件分表。

hospital_dingdan_hid,表名

256,分表的数量

hid,我是按照hid分表的,但是,这里传入的,是hid的值+""

下面我复制一份其他地方引用的代码,传入一个对象,然后生成,这个对象会保存的表。

public String getTableForHId(Project project){
		return TableShardUtil.shard(tab+"uid_",512,<span style="font-size: 13.3333px; font-family: Verdana, Arial, Helvetica, sans-serif;">project</span><span style="font-size: 13.3333px; font-family: Verdana, Arial, Helvetica, sans-serif;">.getUid()+"");</span>
	}

因为CRC32,会生成唯一的一个值(long)

然后,就会根据你传入的对象,获得ID,来生成唯一的值,确定分表了。

各位亲们,可以试试。

如果有什么地方不明白,可以联系我:

QQ:1286238812

时间: 2024-09-17 04:10:40

不用分布式方式,处理大量数据的问题(2)的相关文章

不用分布式方式,处理大量数据的问题

前提: 由于数据量比较大,但是,数据库用的还是mysql,等关系型数据库,如何处理大批量数据的问题. 一句话说,分表来实现. 如何分表,这个需要看业务逻辑的. 比如,写一个医院的系统,稍微说这么一点逻辑 其中,每个检查项目,是一个对象,一个检查套餐,包括很多检查项目,一个人,可能会一次性检查几个套餐+外加几个额外的检查项目,而且,这些检查项目,和检查套餐,很多医院都适用的.所以说,如果这个项目很多医院同时使用,而且,用到的是一个数据库,就会遇到这样的问题. 要么,用分布式数据库,redis,等,

Bigtable:一个分布式的结构化数据存储系统

Bigtable:一个分布式的结构化数据存储系统 本文的英文原文为Google在2006年发布的Google Bigtable paper 本文的翻译版本由Alex完成,原文地址为: http://blademaster.ixiezi.com/ 这是我很长时间以来一直想要翻译的文章,不过由于其文太长,以及本人精力有限,未能如愿,今天偶遇此文,感觉译者此文的翻译已远远超越本人,因此将此翻译版本转载于此. Bigtable:一个分布式的结构化数据存储系统译者:alex 摘要 Bigtable是一个分

以独占方式的锁定数据表的解决方法参考_Dreamweaver

对于Dreamweaver的所有版本软件,在连接数据库正确,绑定记录集成功的情况下 在页面中插入记录,预览网页进行测试时,突然遇到问题大致如下: 错误类型:Microsoft OLE DB Provider for ODBC Drivers (0x80004005)[Microsoft][ODBC Microsoft Access Driver] 机器 'BLUES' 上的用户 'Admin' 以独占方式的锁定数据表 'c_test'. 引起这个错误的可能是: 1,数据库采用的Access文件

android post方式提交中文数据到服务器乱码问题

问题描述 android post方式提交中文数据到服务器乱码问题 Android端代码 AsyncHttpClient client = new AsyncHttpClient(); //URLEncoder.encode(categoryutf-8""); RequestParams params = new RequestParams(); if(path1!=null){ file1=new File(path1); } if(path2!=null){ file2=new F

数据的价值主要体现:图形化方式来呈现数据

文章描述:数据的价值主要体现:图形化方式来呈现数据. 在可用性测试中,数据的价值主要体现在为测试结论提供支持,换句话说,如果我们不能用数据很好的和别人进行交流,我们数据的价值有非常有限. 用表格形式来呈现数据是一种比较简便的方式,但是,为了更好的对数据做出解释,我们需要图形化的方式来呈现数据. 通常情况下,我们用到的数据图的类型有以下几种: l  条形图(柱状图) Column or bar graphs l  折线图 Line graphs l  散点图 Scatter plots l  饼图

mfc-我已经通过MFC ODBC连上mysql数据库了,怎样以最简单的方式访问到数据?

问题描述 我已经通过MFC ODBC连上mysql数据库了,怎样以最简单的方式访问到数据? 已经连上mysql了,现在只需要读出数据库里的数据就行,希望能读出某一个字段中的所有值,按顺序这样读下来,存到我的程序里,怎么读最简单?本人比较菜,最好有易懂的代码,谢谢了 解决方案 就是select * from table这样的比较的理想 解决方案二: 参考:http://www.cnblogs.com/good90/archive/2012/03/04/2379371.htmlMFC通过ODBC连接

post请求-Android post方式上传数据给服务器

问题描述 Android post方式上传数据给服务器 做了一个小例子.Tomcat服务器发布Server.然后在Android手机上用httpurlconnection连接服务器.用post方式上传数据.有个问题很怪.在公司测试的时候没有任何问题.但是到家里运行,链接返回的状态码一直是404.在公司和家里的区别就是公司是局域网IP,在家里我是用的无线路由器自动分配的IP.地址192.168.1.100.我用手机浏览器都能访问到tomcat网站.但是就是post不了数据.各位大侠谁了解,指点一下

activemq-使用消息队列的方式从一个数据平台获取数据

问题描述 使用消息队列的方式从一个数据平台获取数据 是如何保证数据的不重复?也就是说每次取数据都要按照时间字段做限制?还是说不需要关心这个,他给什么就收什么?是多线程的吗,实时保持通信?望好心人做做解答.多谢 解决方案 看什么数据来源,它本身是否支持对消息的唯一编码.如果没有唯一的编码,那么只能以时间戳来作为唯一的依据.消息队列一般都是支持多线程并发的,但是你的程序仍然需要做相应的处理. 解决方案二: 虽然你没有提供多少细节,但是一些常识性的东西可以回答你,根据著名的cap原则,在分布式系统上,

javaweb-spring mvc接收不到put方式提交的数据

问题描述 spring mvc接收不到put方式提交的数据 在做修改的时候,提交的方式是put请求,然后spring mvc中的一个方法处理请求,接收参数是一个实体bean,但是这个接收参数就是接收不到提交的数据不知道除了过滤器能解决还有什么办法没有? 解决方案 spring MVC 接收PUT方式请求关于HTTP提交方式之PUT让spring mvc支持put请求 解决方案二: 假设方法为,接受的参数为User实体类 public void Test1(){} 第一种方式为: public v