分布式查询:
今天分布式查询出现以下错误:
Caused by: java.sql.SQLException: UDAL - DBProxy internal error: invalid route in sql, multi tables found but datanode has no intersection  sql:select pomi.offer_obj_inst_rel_id as memberinstid,pomi.offer_inst_id as prodofferinstid,pomi.obj_id as memberid,pomi.prod_offer_member_id,pomi.status_cd,pomi.status_date,pomi.create_date,pomi.eff_date,pomi.exp_date,pomi.lan_id as areaid,pomi.region_id as regioncd,pomi.create_staff,pomi.update_date,pomi.update_staff,pomi.role_id as rolecd,pomi.rec_update_date,pomi.bank_id,pomi.bank_account from offer_obj_inst_rel pomi,offer_obj_rel pom where pomi.prod_offer_member_id = pom.prod_offer_member_id and pom.class_id = '1' and pomi.obj_id in (107482) and pomi.status_cd != '1100' route map:{OFFER_OBJ_REL=[CONF], OFFER_OBJ_INST_REL=[ASSET47, ASSET29, ASSET46, ASSET28, ASSET45, ASSET27, ASSET44, ASSET26, ASSET25, ASSET24, ASSET23, ASSET48, ASSET22, ASSET20, ASSET01, ASSET21, ASSET02, ASSET03, ASSET42, ASSET04, ASSET43, ASSET05, ASSET40, ASSET06, ASSET41, ASSET07, ASSET08, ASSET09, ASSET38, ASSET37, ASSET39, ASSET34, ASSET10, ASSET33, ASSET36, ASSET35, ASSET13, ASSET30, ASSET14, ASSET31, ASSET11, ASSET32, ASSET12, ASSET17, ASSET18, ASSET15, ASSET16, ASSET19]}
按照以前的理解,sql语句并没有写错,询问导师之后才知道,这两个表一个是单库表,一个是分片表,分布式数据库中分片表和单库表是不允许联合查询的。
于是自行百度搜索了mysql关于分表分区,分库分表的含义与区别:
(一)什么是分表分区:
分表:分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些子表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的子表名,然后去操作它。
分区:分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机器。分区后,表面上还是一张表,但数据散列到多个位置了。app读写的时候操作的还是大表名字,db自动去组织分区的数据。
(二)分表与分区区别:
mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表结构文件。
分区不一样,一张大表进行分区后,还是一张表,不会变成两张表,但是存放数据的区块变多了。 
(三)分表的3种方法:
1、做mysql集群,例如:利用mysql cluster ,mysql proxy,mysql replication,drdb等等(后续加强学习)
2、自定义规则分表
大表可以按照业务的规则来分解为多个子表。通常为以下几种类型,也可自己定义规则。
Range(范围)–这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区。

Hash(哈希)–这中模式允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如可以建立一个对表主键进行分区的表。

Key(键值)-上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。

List(预定义列表)–这种模式允许系统通过预定义的列表的值来对数据进行分割。

Composite(复合模式) –以上模式的组合使用 

如按照日期查找对应的表名:
var getTableName = function() {
    var data = {
        name: 'tom',
        money: 2800.00,
        date: '201410013059'
    };
    var tablename = 'account_';
    var year = parseInt(data.date.substring(0, 4));
    if (year < 2012) {
        tablename += 2011; // account_2011
    } else if (year < 2013) {
        tablename += 2012; // account_2012
    } else if (year < 2014) {
        tablename += 2013; // account_2013
    } else if (year < 2015) {
        tablename += 2014; // account_2014
    } else {
        tablename += 2015; // account_2015
    }
    return tablename;
}


3、利用merge存储引擎来实现分表
merge分表,分为主表和子表,主表类似于一个壳子,或者说是连接池,逻辑上封装了子表,实际上数据都是存储在子表中的。
子表1:c
CREATE TABLE `account_2011` (`id` int(11) NOT NULL AUTO_INCREMENT ,`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,`money` float NOT NULL ,`tradeDate` datetime NOT NULLPRIMARY KEY (`id`))ENGINE=MyISAMDEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ciAUTO_INCREMENT=2CHECKSUM=0ROW_FORMAT=DYNAMICDELAY_KEY_WRITE=0;
子表2:
CREATE TABLE `account_2012` (`id` int(11) NOT NULL AUTO_INCREMENT ,`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,`money` float NOT NULL ,`tradeDate` datetime NOT NULLPRIMARY KEY (`id`))ENGINE=MyISAMDEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ciAUTO_INCREMENT=2CHECKSUM=0ROW_FORMAT=DYNAMICDELAY_KEY_WRITE=0;
主表:
CREATE TABLE `account_all` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`money` float NOT NULL ,
`tradeDate` datetime NOT NULL
PRIMARY KEY (`id`)
)
ENGINE=MRG_MYISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
UNION=(`account_2011`,`account_2012`)
INSERT_METHOD=LAST
ROW_FORMAT=DYNAMIC
;
(四)分区的几种方式:
(1)Range:
create table range(
  id int(11),
  money int(11) unsigned not null,
  date datetime
  )partition by range(year(date))(
  partition p2007 values less than (2008),
  partition p2008 values less than (2009),
  partition p2009 values less than (2010)
  partition p2010 values less than maxvalue
);
(2)List
create table list(

  a int(11),
  b int(11)
  )(partition by list (b)
  partition p0 values in (1,3,5,7,9),
  partition p1 values in (2,4,6,8,0) 
);
(3)hash:
create table hash(
  a int(11),
  b datetime
  )partition by hash (YEAR(b)
  partitions 4;

(4)key:
create table t_key(
  a int(11),
  b datetime)
  partition by key (b)
  partitions 4;


?

Mysql 分表分区相关推荐

  1. mysql —— 分表分区

    面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗? 答案是肯定的,一个表的总记录超过1000W,在操作系统层面检索也是效率非常低的 解决方案: 目前针对海量 ...

  2. mysql —— 分表分区(1)

    面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗? 答案是肯定的,一个表的总记录超过1000W,在操作系统层面检索也是效率非常低的 解决方案: 目前针对海量 ...

  3. MySQL数据库分表分区

    防伪码:当你终于沉默,成熟才刚刚开始. 为什么要分表和分区? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且 由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性 ...

  4. mysql 主表存hash和子表的名字_【mysql】mysql分表和表分区详解

    为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...

  5. 分享:mysql分表,分区的区别和联系

    mysql分表,分区的区别和联系 http://my.oschina.net/haorizi/blog/113044

  6. MySql 分表、分库、分片和分区

    MySql 分表.分库.分片和分区 转载:用sharding技术来扩展你的数据库(一)sharding 介绍 转载:MySQL架构方案 - Scale Out & Scale Up. 转载:  ...

  7. mysql 分表和分区_Mysql分表和分区的区别

    一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘 ...

  8. mysql 分表规则获取表名_mysql分表和表分区详解

    为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...

  9. mysql 数据表分区与分表介绍

    什么是分表? 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,MYI索引文件,frm表结构文件.这些子表可以分布在同一块磁盘上 ...

  10. mysql 分库分表分区总结

    Mysql目录结构 一个库一个目录 MyISAM引擎 InnoDB引擎 分库分表分区总结 对于分区分表 都可以进行横向(按表字段分),纵向分(按数据行分),此文暂时值考虑横向分. 对于分库:分库 分区 ...

最新文章

  1. C++ 3 基本数据类型
  2. 增强 用文本增强修改SAP标准屏幕中的字段名称 属于元素的文本增强
  3. Spring基础篇——Spring容器和应用上下文理解
  4. 前端学习(2056):初识vue.js
  5. Python 的 requests 库的用法
  6. Oracle match_recognize
  7. Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your My
  8. Acer4745G笔记本蓝牙驱动安装
  9. c语言智能小车项目的感想,智能小车实训报告
  10. maven 常用命令
  11. 大话2正在连接登录服务器,大话西游手游服务器连接失败进不去解决办法
  12. CURD同事狂刷阿里面试指南(恒山版),直接斩获七个offer
  13. 交房后,如何办理产权证、土地证?
  14. 全球与中国汽车检测设备市场现状及未来发展趋势
  15. CocoaPods出现The dependency `` is not used in any concret错误的解决方法
  16. 明天老外要上课,先准备一下词汇:)
  17. linux学习笔记2.0
  18. tensorflow显存自适应分配(tf.1x和tf2.x)
  19. 直播源码搭建教程5 分钟完成(直播 + 分流 + 画面水印)
  20. unit英语读音_式读音【式读音英语头条】- 式读音知识点 - 中企动力

热门文章

  1. js创建节点删除节点实例
  2. Cobalt Strike Malleable C2
  3. jquery和prototype比较,以及冲突解决(转)
  4. android反加密反加固,[原创]记一次爱加密反调试分析及绕过思路
  5. CVPR 2021 Pre-Trained Image Processing Transformer
  6. android 遥控器home键键值,android 中遥控器键值的添加和修改
  7. keil编译错误:Error:Flash DownLoad failed - “Cortex-M4“
  8. React组件抽象(一): mixin
  9. turtle的setheading函数详解
  10. 502 bad gateway原因、解决方法