`

mycat 时间分片处理

阅读更多
schema.xml
<mycat:schema xmlns:mycat="http://io.mycat/">

        <!-- dataNode="name1" 指定全部表所在的数据库节点,name1所在的数据库必须包含所有表,其他则只需schema里的table即可-->
        <schema name="engine" checkSQLschema="false" sqlMaxLimit="100000" dataNode="name1">
                <!-- auto sharding by id (long) -->
                <table name="t_access_log" primaryKey="F_ID" dataNode="name$1-4" rule="sharding-by-date" />
        </schema>

        <dataNode name="name1" dataHost="dataHost1" database="engine" />
        <dataNode name="name2" dataHost="dataHost2" database="database1" />

        <dataNode name="name3" dataHost="dataHost1" database="database2" />
        <dataNode name="name4" dataHost="dataHost2" database="database2" />

        <dataHost name="dataHost1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="10.0.8.123:3306" user="root"
                                   password="sensenets">
                </writeHost>
        </dataHost>
        <dataHost name="dataHost2" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM2" url="10.0.8.124:3306" user="root"
                                   password="sensenets">
                </writeHost>
        </dataHost>
</mycat:schema>


rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
	- you may not use this file except in compliance with the License. - You 
	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
	- - Unless required by applicable law or agreed to in writing, software - 
	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
	License for the specific language governing permissions and - limitations 
	under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
	<tableRule name="rule1">
		<rule>
			<columns>F_Face_Key</columns>
			<algorithm>func1</algorithm>
		</rule>
	</tableRule>

	<tableRule name="rule2">
		<rule>
			<columns>user_id</columns>
			<algorithm>func1</algorithm>
		</rule>
	</tableRule>

	<tableRule name="sharding-by-intfile">
		<rule>
			<columns>sharding_id</columns>
			<algorithm>hash-int</algorithm>
		</rule>
	</tableRule>
	<tableRule name="auto-sharding-long">
		<rule>
			<columns>id</columns>
			<algorithm>rang-long</algorithm>
		</rule>
	</tableRule>
	<tableRule name="mod-long">
		<rule>
			<columns>id</columns>
			<algorithm>mod-long</algorithm>
		</rule>
	</tableRule>
	<tableRule name="sharding-by-murmur">
		<rule>
			<columns>id</columns>
			<algorithm>murmur</algorithm>
		</rule>
	</tableRule>
	<tableRule name="crc32slot">
		<rule>
			<columns>id</columns>
			<algorithm>crc32slot</algorithm>
		</rule>
	</tableRule>	
	<tableRule name="latest-month-calldate">
		<rule>
			<columns>calldate</columns>
			<algorithm>latestMonth</algorithm>
		</rule>
	</tableRule>
	
	<tableRule name="auto-sharding-rang-mod">
		<rule>
			<columns>id</columns>
			<algorithm>rang-mod</algorithm>
		</rule>
	</tableRule>
	
	<tableRule name="jch">
		<rule>
			<columns>id</columns>
			<algorithm>jump-consistent-hash</algorithm>
		</rule>
	</tableRule>
	
	<tableRule name="sharding-by-month">
		<rule>
			<columns>createdate</columns>
			<algorithm>partbymonth</algorithm>
		</rule>
	</tableRule>
	
	<tableRule name="sharding-by-date">
		<rule>
			<columns>F_Log_Time</columns>
			<algorithm>sharding-by-date</algorithm>
		</rule>
	</tableRule>
	
	

	<function name="murmur"
		class="io.mycat.route.function.PartitionByMurmurHash">
		<property name="seed">0</property><!-- 默认是0 -->
		<property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
		<property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍 -->
		<!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 -->
		<!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 
			用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 -->
	</function>

	<function name="crc32slot"
			  class="io.mycat.route.function.PartitionByCRC32PreSlot">
		<property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
	</function>
	<function name="hash-int"
		class="io.mycat.route.function.PartitionByFileMap">
		<property name="mapFile">partition-hash-int.txt</property>
	</function>
	<function name="rang-long"
		class="io.mycat.route.function.AutoPartitionByLong">
		<property name="mapFile">autopartition-long.txt</property>
	</function>
	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<!-- how many data nodes -->
		<property name="count">3</property>
	</function>

	<function name="func1" class="io.mycat.route.function.PartitionByLong">
		<property name="partitionCount">4</property>
		<property name="partitionLength">256</property>
	</function>
	<function name="latestMonth"
		class="io.mycat.route.function.LatestMonthPartion">
		<property name="splitOneDay">24</property>
	</function>
	<function name="partbymonth"
		class="io.mycat.route.function.PartitionByMonth">
		<property name="dateFormat">yyyy-MM-dd</property>
		<property name="sBeginDate">2015-01-01</property>
		<property name="sEndDate">2015-03-31</property>
	</function>
	
	<function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod">
        	<property name="mapFile">partition-range-mod.txt</property>
	</function>
	
	<function name="jump-consistent-hash" class="io.mycat.route.function.PartitionByJumpConsistentHash">
		<property name="totalBuckets">3</property>
	</function>
	
	<function name="sharding-by-date" class="io.mycat.route.function.PartitionByDate">
		<property name="dateFormat">yyyy-MM-dd</property>
		<property name="sBeginDate">2015-01-01</property>
		<property name="sEndDate">2015-01-30</property>
		<property name="sPartionDay">1</property>
	</function>
</mycat:rule>


server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
	- you may not use this file except in compliance with the License. - You 
	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
	- - Unless required by applicable law or agreed to in writing, software - 
	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
	License for the specific language governing permissions and - limitations 
	under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<system>
	<property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
	<property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->

		<property name="sequnceHandlerType">2</property>
      <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
        <!--  <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
	<!-- <property name="processorBufferChunk">40960</property> -->
	
		<property name="processors">16</property> 
		<property name="processorExecutor">32</property> 
		<property name="processorBufferPool">33554432</property> 
		<!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
		<property name="processorBufferPoolType">0</property>
		<property name="frontWriteQueueSize">12288</property> 
		<!--默认是65535 64K 用于sql解析时最大文本长度 -->
		<!--<property name="maxStringLiteralLength">65535</property>-->
		<!--<property name="sequnceHandlerType">0</property>-->
		<!--<property name="backSocketNoDelay">1</property>-->
		<!--<property name="frontSocketNoDelay">1</property>-->
		<!--<property name="processorExecutor">16</property>-->
		<!--
			<property name="serverPort">8066</property> <property name="managerPort">9066</property> 
			<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
			<property name="frontWriteQueueSize">4096</property> 
			<property name="processors">32</property> -->
		<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
		<property name="handleDistributedTransactions">0</property>
		
			<!--
			off heap for merge/order/group/limit      1开启   0关闭
		-->
		<property name="useOffHeapForMerge">1</property>

		<!--
			单位为m
		-->
		<property name="memoryPageSize">1m</property>

		<!--
			单位为k
		-->
		<property name="spillsFileBufferSize">1k</property>

		<property name="useStreamOutput">0</property>

		<!--
			单位为m
		-->
		<property name="systemReserveMemorySize">384m</property>


		<!--是否采用zookeeper协调切换  -->
		<property name="useZKSwitch">true</property>


	</system>
	
	<!-- 全局SQL防火墙设置 -->
	<!-- 
	<firewall> 
	   <whitehost>
	      <host host="127.0.0.1" user="mycat"/>
	      <host host="127.0.0.2" user="mycat"/>
	   </whitehost>
       <blacklist check="false">
       </blacklist>
	</firewall>
	-->
	
	<user name="root">
		<property name="password">123456</property>
		<property name="schemas">engine</property>
		
		<!-- 表级 DML 权限设置 -->
		<!-- 		
		<privileges check="false">
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>		
		 -->
	</user>

	<user name="user">
		<property name="password">123456</property>
		<property name="schemas">engine</property>
		<property name="readOnly">true</property>
	</user>

</mycat:server>



生产环境:30个数据库节点,3个机器(机器有限,正式使用时,可以把节点迁移出去),测试2700w数据,无图检索豪秒级返回

时间分片的一些特性
https://blog.csdn.net/mchdba/article/details/50656478
分享到:
评论

相关推荐

    Mycat从入门到精通之Mycat跨分片处理机制.zip

    《Mycat从入门到精通之Mycat跨分片处理机制》教程涵盖了数据库分片技术的核心内容,尤其是Mycat作为开源的分布式数据库中间件,如何实现高效、灵活的跨分片处理机制。本教程旨在帮助初学者理解并掌握Mycat在大数据...

    基于MYCAT简单实现数据库水平分片测试示例详解

    通过监控MYCAT的日志和性能指标,如查询响应时间、吞吐量等,来评估分片的效果。同时,也要关注MYCAT的负载均衡性能,检查是否能有效地分散请求到各个分片节点,避免热点数据导致的单点压力过大。 此外,为了确保...

    Mycat数据库分库分表

    哈希分片适合均匀分布的数据,范围分片适合时间序列或数值范围的数据,列表分片则适用于已知分区的数据。 2. 表结构设计:在分库分表后,表的主键需要调整,通常采用全局唯一ID生成器生成分布式主键,保证数据的...

    mycat mySql集群配置 含按日分库 按月分库等

    对于按日分库,我们可以选择时间戳作为分片键,例如创建表时,可以设定一个时间字段,然后在Mycat配置文件中定义分片规则,如: ```xml &lt;property name="sharding-count"&gt;365&lt;/property&gt; &lt;!-- 按照一年的...

    Mycat从入门到精通之分片规则、场景、策略.zip

    在大数据时代,面对海量的数据存储和处理需求,传统的单机数据库系统往往力不从心,而Mycat作为一款开源的分布式数据库系统,通过数据分片技术,实现了数据的水平扩展,极大地提升了数据库系统的性能和可扩展性。...

    mycat打包合集

    《Mycat跨分片Join指南》则介绍了在分布式环境中如何处理跨分片的数据关联查询。由于数据分布在不同的节点上,MyCat需要进行额外的计算来完成JOIN操作,这可能会带来性能挑战。因此,设计合理的数据模型和查询策略,...

    Mycat中间件

    1. 数据库分片:Mycat可以根据业务需求将数据分布在多个数据库节点上,实现水平扩展,提高数据库处理能力。通过自定义分片规则,可以灵活地控制数据分布和查询策略。 2. 支持SQL92标准:Mycat支持大部分SQL语句,...

    mycat入门到精通教程

    4. **Mycat数据分片** 数据分片策略有哈希分片、范围分片、列表分片等,可以根据业务需求选择合适的策略。例如,哈希分片通过计算字段的哈希值决定数据存放的位置,适合均匀分布数据;范围分片则根据字段的范围划分...

    MyCat从入门到放弃

    此外,MyCat的配置文件设置是关键,包括server.xml(服务器配置)、schema.xml(数据分片规则)、rule.xml(分片策略)。 在server.xml中,你可以设置服务器端口、日志级别、心跳检测等参数,这些都是保证MyCat正常...

    mycat2(mycat2-1.21-release-jar-with-dependencies.jar)

    4. Rule层:mycat2的分片规则定义,包括哈希分片、范围分片、复合分片等多种策略。 三、mycat2-1.21-release-jar-with-dependencies.jar使用指南 1. 配置环境:首先,需要配置mycat2的配置文件,包括server.xml...

    Mycat配置使用

    2. 非分片表:是指在Mycat中不会被进行分片处理的表,所有数据都存放在单一的分片节点上。 3. 分片表:是按照某种规则分布到多个分片节点的数据表,这种规则可以是范围分片、枚举分片、时间分片、一致性Hash分片等。...

    MyCat

    2. **数据分片**:MyCat 的核心功能是数据分片,它可以将大表分成多个小表,分布在不同的数据库服务器上,以实现水平扩展,提高查询和写入性能。 3. **读写分离**:MyCat 支持读写分离,即读操作和写操作可以分散到...

    MySQL分布式数据库中间件Mycat性能调优指南

    2. **数据分片策略**:数据分片是Mycat性能的关键,常见的有哈希分片、范围分片、复合分片等。选择合适的分片策略可以显著提升查询效率,避免热点数据的出现。例如,哈希分片适合均匀分布的数据,范围分片适用于有序...

    mycat-server-1.6-win.rar

    Mycat,作为一款开源的数据库分片中间件,近年来在大数据处理领域备受关注。标题中的"mycat-server-1.6-win.rar"表明这是一个针对Windows系统的Mycat服务器1.6版本的压缩包。描述中的"Mycat-server-1.6-RELEASE-...

    MyCat 第2天-part1.7z

    MyCat 的分片功能对于处理大数据量的场景尤为重要,它能有效地提升数据库系统的并发处理能力和数据存储能力,同时保持较低的延迟,是企业级分布式数据库解决方案中的重要一环。学习并熟练掌握 MyCat 的分片技术,...

    mycat_建库建表_SQL.rar

    理解Mycat的分片策略和SQL语句的使用是成功部署和管理分布式数据库的关键。"mycat_建库建表_SQL"这个压缩包提供的正是这些SQL脚本,供学习和测试使用,帮助你掌握在Mycat环境中创建数据库和表的方法。

    proxy与mycat对比测试

    在IT行业中,数据库分片和负载均衡是提升大型应用系统性能和可扩展性的重要手段。Proxy和Mycat是两种常用的中间件,用于实现这些功能。本篇文章将深入探讨proxy和Mycat的对比测试,以及如何在MySQL主从架构中进行...

    《MyCat》MySQL集群中间件

    分库分表策略通常包括哈希分片、范围分片和用户自定义分片等。 2. 数据路由:MyCat能够根据SQL语句的条件自动选择合适的数据库进行操作,透明化数据库的分布式环境,开发人员无需关心数据的具体存储位置。 3. 数据...

    Mycat2:基于Java IOMySQL代理,基于分片SQL,方解石,简单而快速

    总结起来,Mycat2是一个强大且灵活的数据库中间件,它利用Java的非阻塞I/O和异步处理能力,结合SQL分片和分布式事务管理,为大型企业级应用提供了解决数据库扩展性的有效途径。对于需要处理海量数据和高并发场景的...

Global site tag (gtag.js) - Google Analytics