我是靠谱客的博主 靓丽果汁,最近开发中收集的这篇文章主要介绍不用分布式方式,处理大量数据的问题前提:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前提:

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


下面是具体的用法:

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

最后

以上就是靓丽果汁为你收集整理的不用分布式方式,处理大量数据的问题前提:的全部内容,希望文章能够帮你解决不用分布式方式,处理大量数据的问题前提:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部