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

来源:互联网 发布:淘宝开店书籍推荐 编辑:程序博客网 时间:2024/06/05 13:30

前提:

由于数据量比较大,但是,数据库用的还是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张表了。


下面是具体的用法:

////我先去吃饭,下午回来再写。

0 0
原创粉丝点击