概述
前提:
由于数据量比较大,但是,数据库用的还是mysql,等关系型数据库,如何处理大批量数据的问题。
一句话说,分表来实现。
如何分表,这个需要看业务逻辑的。
比如,写一个医院的系统,稍微说这么一点逻辑
其中,每个检查项目,是一个对象,一个检查套餐,包括很多检查项目,一个人,可能会一次性检查几个套餐+外加几个额外的检查项目,而且,这些检查项目,和检查套餐,很多医院都适用的。所以说,如果这个项目很多医院同时使用,而且,用到的是一个数据库,就会遇到这样的问题。
要么,用分布式数据库,redis,等,,要么,就分开用不同的数据库服务器,要么,就是分表,额,我暂时,只想到这几种方式。
下面说说分表。
上面的前提已经交代的很清楚了。
现在有这么一张表,保存的是,人,医院,检查项目,一次来医院检查的记录,等等一系列信息。
如果这个数据量特别大,可以按照这几个地方来分表。
1、按照检查项目分表
2、按照医院分表
3、按照用户分表
上面说了一堆不是废话的废话,下面说怎样来分表。
稍等,我先写一篇,java CRC32 的用法
好了,文章写完了,可以先看看我写的crc32的文章,利用CRC32 的特性,生成一个唯一的值,然后来定义表的名字。
下面贴代码。先写可以创建很多数据库的代码。
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
public class CreateTableScript {
private JdbcTemplate ecdTemplate;
private JdbcTemplate ecdUserTemplate;
private JdbcTemplate ecdMRecordTemplate;
private JdbcTemplate ecdReportTemplate;
@Before
public void setup() {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
ecdMRecordTemplate = (JdbcTemplate) context.getBean("ecdMRecrodMasterTemplate");
}
@Test
public void createTreatTpl(){
String tableName = "hospital_dingdan_hid";
for(int i = 0; i <256 ; i++){
String tab = String.format(tableName+"_%02x", i);
String sql = "CREATE TABLE `"
+ tab
+ "` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,"
+"`tplid` bigint(20) NOT NULL,"
+"`treatid` bigint(20) NOT NULL,"
+"`docid` bigint(20) NOT NULL,"
+"`addtime` int(11) NOT NULL,"
+"`modtime` int(11) NOT NULL,"
+"`status` tinyint(4) NOT NULL,"
+" PRIMARY KEY (`id`)"
+" ) ENGINE=InnoDB DEFAULT CHARSET=utf8";
ecdMRecordTemplate.execute(sql);
}
}
}
我稍微说一下我的代码,我这里用的是,单元测试的方法,只需要执行这一个@Test方法就可以了。
项目中,用的是springMVC+JDBC
稍微有点经验的人能看出来。
所以说,在setup()方法中,我需要先加载applicationcontext.xml,然后通过,spring注解,找到对应的数据库。
然后再用JDBC链接数据库来操作数据,
然后,代码中,tableName 的后缀,是hid ,我这里用的是hid分表。
同理,其他的分表 可以用其他的后缀,方便就可以了。
根据数据大小,感觉,分出来256张表,应该就够用了。
这里,%02x 不懂的,自己百度去,这个,跟C语言用法一样。
然后,就可以创建256张表了。
下面是具体的用法:
我先去吃饭,下午回来再写。
最后
以上就是靓丽果汁为你收集整理的不用分布式方式,处理大量数据的问题前提:的全部内容,希望文章能够帮你解决不用分布式方式,处理大量数据的问题前提:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复