MyCat范围分片设置默认分片
最近使用mycat,数据设计不满足字段枚举分片的条件,于是使用 autopartition-long 分片。
有个问题,数据超过范围,怎么办?mycat一直报错,我不可能事先预知数据即将超过范围分片设置的范围。
mycat群106088787 有个叫武的群友,使用了枚举分片自动扩容,参考了其思想,我改写了范围分片
org.opencloudb.route.function.AutoPartitionByLong源文件
@Override public Integer calculate(String columnValue) { long value = Long.valueOf(columnValue); Integer rst = null; for (LongRange longRang : this.longRongs) { if (value <= longRang.valueEnd && value >= longRang.valueStart) { return longRang.nodeIndx; } } if(rst ==null && defaultNode>=0){ return defaultNode ; } return rst; }
在rule.xml中,分片函数新加了一个属性配置
<function name="rang-long" class="org.opencloudb.route.function.AutoPartitionByLong"> <property name="mapFile">autopartition-long.txt</property> <property name="defaultNode">0</property> </function>
这个属性配置了默认节点0,所以0预留出来了,在autopartition-long.txt中
# range start-end ,data node index # K=1000,M=10000. 0-500K=1 500K-1000K=2 1000K-1500K=3
节点索引从1开始。
不用担心org.opencloudb.route.function.AutoPartitionByLong更改会有问题
org.opencloudb.config.loader.xml.XMLRuleLoader加载rule.xml的时候,
private void loadFunctions(Element root) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException { ..... ParameterMapping.mapping(function, ConfigUtil.loadElements(e)); ..... }
在ParameterMapping.mapping中,处理了rule.xml function的子节点property
if (cls != null) { if (value != null) { Method method = pd.getWriteMethod(); if (method != null) { method.invoke(object, new Object[] { value }); } } }
通过java 反射调用了AutoPartitionByLong类的属性写入函数,也就是setDefaultNode。
这样当数据超过范围后,节点0中的表就会有数据,发现后,可以新增节点,再将节点0中的数据dump过去就好了。
106088787
106088787
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关推荐
《Mycat分片规则详解》 Mycat是一款开源的分布式数据库中间件,它能够实现数据的分片,提高数据库的处理能力。Mycat的分片规则是其核心功能之一,它允许用户根据业务需求自定义数据的分布方式。本文将深入探讨Mycat...
《Mycat分片规则详解:哈希算法的应用》 Mycat,作为一个分布式数据库中间件,其核心功能之一就是实现数据的分片,以提高数据库的处理能力和扩展性。在Mycat中,分片规则是至关重要的,它决定了数据如何在多个...
Mycat 的分片算法有多种,包括一致性哈希分片、范围分片、枚举分片等,本文将主要介绍Mycat的一致性哈希分片算法。 一致性哈希分片算法是Mycat中的一种常用分片算法,它通过对数据的哈希值进行映射,来确定数据应该...
《Mycat分片规则与算法详解》 Mycat,作为一款开源的分布式数据库中间件,其核心功能之一就是实现数据的分片,以提高数据库的读写性能和存储能力。本文将深入探讨Mycat中的分片规则和算法,包括枚举法、固定分片...
- **解决方案**:对于新出现的枚举值,可以在初始阶段将其归入某个默认分片中。一旦这类新值积累到一定数量,再创建新的分片进行迁移处理。 #### 四、具体实施案例 **4.1 场景说明** 假设有一个电商应用,需要根据...
Mycat分片节点(datanode)和节点主机(datahost): 分片节点(datanode)是指在Mycat中定义的逻辑上的数据库实例,每个datanode对应后端实际的一个数据库节点。而节点主机(datahost)则是指承载分片节点的物理服务器,是...
`rule.xml`用于定义复杂的分片规则,如范围分片、哈希分片等。 5. **连接Mycat** Mycat启动后,你可以通过MySQL客户端(如MySQL Workbench或命令行客户端)连接到Mycat服务器。默认情况下,Mycat监听在3306端口,...
6. **数据路由与一致性**:MyCat根据预设的分片规则对SQL语句进行解析和路由,确保数据写入正确的分片。它还提供了事务支持,以保证跨分片的数据一致性。 7. **监控与管理**:MyCat提供Web界面和命令行工具,用于...
MyCat支持主从复制、分片、读写分离等多种分布式架构模式,使得大数据量的处理变得高效且灵活。 二、读写分离原理 读写分离的基本思想是将对数据库的读操作和写操作分配到不同的服务器上,通常主数据库负责写操作...
- 分片规则配置文件,定义了Mycat支持的所有分片规则。 - **Function节点**: 定义分片规则的实现类与初始化参数。 - 属性`name`定义规则算法名称。 - 属性`class`定义规则实现类。 - 子节点`property`用于初始...
MyCat是开源的、基于Java实现的数据库中间件,它主要用作数据库的分片工具,常用于大数据处理场景,以提升数据库的读写性能和可扩展性。 【描述】虽然描述信息为空,但我们可以推断这个压缩包可能包含了MyCat 2的...
3. **表分片规则**:定义数据分片策略,例如哈希分片、范围分片等。在schema.xml中配置分片规则,指定哪些表会被分片,以及分片算法。 4. **逻辑库和表**:在schema.xml中创建逻辑库和表,逻辑库是Mycat中的虚拟库...
Mycat是基于Java开发的一款开源分布式数据库中间件,它主要应用于解决大数据量、高并发场景下的数据分片、读写分离等问题。在本压缩包"mycat1.6.7.5.zip"中,包含了在Linux环境下安装Mycat 1.6.7.5所需的所有关键...
3. 配置路由规则:在 `rule.xml` 文件中设置数据路由规则,例如根据主键进行分片,或自定义复杂的分片算法。 五、读写分离配置 1. 分离策略:在Mycat中,可以通过配置决定哪些操作走读库,哪些操作走写库。默认情况...
**Mycat** 是一款开源的分布式数据库中间件,采用 Java 语言编写,能够帮助开发者实现数据分片、读写分离等功能。为了确保 **Mycat** 能够顺利运行,首先需要准备相应的运行环境。 1. **Java 运行环境**:由于 **...
在IT行业中,Linux系统因其稳定性和安全性而广泛应用于服务器领域,而Mycat则是一款针对大数据分布式处理的开源数据库中间件,它为大型网站和企业提供了高性能的数据分片解决方案。本篇文章将详细介绍如何在Linux...
2. `conf`目录:存放Mycat的配置文件,包括`server.xml`(Mycat服务器配置)、`schema.xml`(数据分片规则)、`dataNode.xml`(数据节点配置)和`rule.xml`(分片策略)等。 3. `lib`目录:包含Mycat运行所需的库...
2. **定义Schema和Table Rule**:在MyCat的schema.xml文件中,你需要定义数据分片的规则。例如,你可以根据表的ID范围或者取模来决定数据存储在哪一片段,这决定了读写分离的基础。 3. **配置Data Node**:Data ...