分库分表
文章平均质量分 60
分库分表相关文章.
abckingaa
一个软件设计爱好者。主要项目经验集中在银行等金融领域,有10余年工作经历。对软件设计如何提高开发效率,提高易维护性,易扩展性,分布式系统、大数据量高可用、高并发系统有深入研究!
展开
-
一文搞懂数据库分片:分库分表,只分库不分表,只分表不分库...
默认是使用求余来映射,如orderid的值为10, 10%6=4,则表是orders4,再通过表来确定库是ds1(这样可以不用指定库的规则)。从日志也可以看出:ds0这个数据库里有表:orders0,orders1,orders2;参考Java ORM 工具Bee,一个简单易用又功能强大的ORM;ds1里有表:orders3,orders4,orders5;要整合一堆的工具,还不如只用一个小巧又功能强大的工具。如何通过orderid字段的值找到相应的表和库;分片键(分片字段是:orderid)原创 2024-01-02 00:42:01 · 1130 阅读 · 1 评论 -
Mongodb ORM(Bee)
是Bee提供众多ORM功能的一部分;Bee,互联网新时代的框架,同时支持(比如JavaWeb),Android和Harmony;支持分片;支持多种关系型数据库(等),还支持NoSQL的等.原创 2023-03-19 12:08:59 · 746 阅读 · 1 评论 -
Java ORM开发 更全面的应用场景
一个小框架,顶好几个大框架了。原创 2023-03-10 09:09:46 · 342 阅读 · 0 评论 -
配置多数据源的三种方式(Spring boot + Bee)
Java ORM Bee 同时支持JDBC(比如JavaWeb),Android和Harmony;支持Sharding分片;支持多种关系型数据库(MySQL,MariaDB,Oracle,H2,SQLite,PostgreSQL,SQL Server,Access等),还支持NoSQL的Cassandra,Mongodb等。原创 2023-02-25 22:46:59 · 580 阅读 · 0 评论 -
MongoDB在银行海量历史订单交易数据查询中的应用(Spring boot + Bee)
MongoDB在银行海量历史订单交易数据查询中的应用(Spring boot + Bee)近年来,随着各种便捷支付方式的普及,银行账户交易数据呈现爆炸式增长,同时数据模型也在不断变化,传统关系型数据库已难以满足这种海量的、模式灵活、高可用、高性能的数据存储和查询需求。通过对银行历史交易数据查询业务特点的分析,本文提出一种基于MongoDB数据库的银行海量历史订单交易数据查询解决方案,方案包括系统架构、数据模型、索引设计和分片键策略。实验表明,MongoDB能够实现海量的交易数据的存储和快速查询能力。原创 2023-02-25 21:55:53 · 902 阅读 · 0 评论 -
数据集成专家--Java ORM Bee
网络的发展与互联网应用的普及推动了电子商务平台的快速发展。人们开始习惯使用电子商务平台,随着用户越来越多,平台的访问速度开始下降,为了提高电子商务平台的性能,很多公司在搭建电商平台的过程中不仅使用关系型数据库,还使用非关系型数据库进行数据存储。大数据时代,需要集成多样化数据管理分析工具完成业务需求,然而不同工具的数据访问接口标准不一,需要借助适配器进行接口转换以实现数据管理分析工具协作.因此,如何快速集成不同工具成为学术界与工业界亟待解决的问题。原创 2023-02-25 16:04:21 · 222 阅读 · 0 评论 -
Sharding分库分表(目录)
1. 背景:为什么需要分库分表 2. 分库分表种类 3. 基本概念 4. 路由/映射 5. 分片流程与Sharding核心问题 6. Sharing最佳实践 7. Bee对分片的优化原创 2023-02-25 15:09:54 · 368 阅读 · 0 评论 -
ORM 源码分析,API 为什么这样设计
updateBy方法中,String whereFields(若有),可以指明用于SQL中WHERE的字段.当指定了whereFields, 没在whereFields的字段,将默认。update方法中,String updateFields参数(若有),可以指明要更新的字段,其余字段则有可能转为SQL UPDATE语句的WHERE部分(默认过。同一个实体的某个属性的值,若用于WHERE部分了,再用于UPDATE SET部分就没有意义(因为此时它们的值是一样的),但可以用Condition的。原创 2023-02-14 22:48:49 · 375 阅读 · 1 评论 -
Mongodb Sharding分片查询,带分页功能(ORM Bee)
表示有两个分片 ds0,ds1;基本表名是:orders, ds0 中有 orders0,orders1,orders2;ds1 中有 orders3,orders4,orders5;Bee 会解析得到 orders 所有表的分布情况。fullNodes: {orders={ds0=[0, 1, 2], ds1=[3, 4, 5]}}说明:根据条件,会查询到三条数据(分别在三个不同的分片),然后一页只返回 2 条记录。在 main 方法,调用以下方法即可。以下为对 Orders 实体分片的配置,简单易用。原创 2023-01-12 20:50:50 · 533 阅读 · 0 评论 -
使用 ORM 方式查询 Mongodb 里的数据,再也不用记 Mongodb 的语法(ORM Bee)
Bee是一个简单易用的ORM框架,文件小,性能好;支持Mongodb,支持 JDBC,还支持 Android 和 Harmony。Mongodb的语法可读性差,要写复杂查询,要求技术能力高;使用ORM方式查询Mongodb里的数据,再也不用记Mongodb的语法(ORM Bee)使用between and的用法, mongodb是不支持的,但使用Bee却很简单。Bee关于Mongodb的功能,还有多数据源, Sharing 分片操作。可以使用ORM方式,轻松搞定增删改查的操作。原创 2023-01-12 20:43:10 · 833 阅读 · 0 评论 -
使用ORM方式查询Mongodb里的数据,再也不用记Mongodb的语法(ORM Bee)
Mongodb的语法可读性差,要写复杂查询,要求技术能力高;使用ORM方式查询Mongodb里的数据,再也不用记Mongodb的语法(ORM Bee)使用between and的用法, mongodb是不支持的,但使用Bee却很简单。Bee关于Mongodb的功能,还有多数据源, Sharing 分片操作。以下演示了,如何查询orders集合(表)的某部分数据。可以使用ORM方式,轻松搞定增删改查的操作。即可,不需要使用Condition。Bee是一个简单易用的ORM框架,原创 2023-01-12 00:07:04 · 1076 阅读 · 0 评论 -
Mongodb Sharding分片查询,带分页功能(ORM Bee)
表示有两个分片ds0,ds1;基本表名是:orders, ds0中有orders0,orders1,orders2;fullNodes: {orders={ds0=[0, 1, 2], ds1=[3, 4, 5]}}本文手把手教你,使用ORM面向对象的方式,进行Mongodb Sharding分片查询。说明:根据条件,会查询到三条数据(分别在三个不同的分片),然后一页只返回2条记录。userid为分片键,需要设置。1、在bee.properties里添加配置。以下为对Orders实体分片的配置,简单易用。原创 2023-01-11 23:41:52 · 414 阅读 · 0 评论 -
Mongodb常用数据类型
Mongodb常用数据类型原创 2022-12-11 21:58:02 · 392 阅读 · 0 评论 -
NoSQL mongodb与标准SQL RDB概念对比
NoSQL mongodb与标准SQL RDB概念对比Mongodb常用数据类型原创 2022-12-11 21:58:11 · 129 阅读 · 0 评论 -
同时支持开发JavaWeb,手机APP(安卓,鸿蒙),大数据,关系型DB,NoSQL等--互联网时代的ORM 工具--Bee
支持多种关系型数据库(MySQL,MariaDB,Oracle,H2,SQLite,PostgreSQL,SQL Server,Access等),还支持NoSQL的Cassandra,Mongodb等。同一套Dao代码,就可以访问以上提到的多种数据库(JavaWeb的代码,也是可以用在手机app的),无需重复开发。同时支持开发JavaWeb,手机APP(安卓,鸿蒙),大数据,关系型DB,NoSQL等--互联网时代的ORM 工具--Bee。要整合一堆的工具,还不如只用一个小巧又功能强大的工具。原创 2022-12-10 09:36:01 · 1262 阅读 · 0 评论 -
Bee源码分析:Bee使用的设计模式与设计原则
Bee源码分析:Bee使用的设计模式与设计原则原创 2022-10-23 23:09:00 · 309 阅读 · 0 评论 -
分库分表 Sharding:7. Bee 对分片的优化
对一库多表的分页查询,不执行分片查询,而是通过改写 SQL,只使用一个 sql 语句查询所要的数据,再返回。最终路由到一库一表,即不会造成分片,因此 Bee 将其优化为单点操作。通过实际表的推断,找到具体的数据库,从而变为一库一表,而不是多库一库。因此,只涉及一次查询。在设计时,可以将有关系的表,尽量放在一个库中。如,主从表,使用一样的表下标。使用广播表,避免跨库查询。转载 2022-10-12 20:59:41 · 139 阅读 · 0 评论 -
分库分表 Sharding:7. Bee 对分片的优化
对一库多表的分页查询,不执行分片查询,而是通过改写 SQL,只使用一个 sql 语句查询所要的数据,再返回。最终路由到一库一表,即不会造成分片,因此 Bee 将其优化为单点操作。通过实际表的推断,找到具体的数据库,从而变为一库一表,而不是多库一库。因此,只涉及一次查询。在设计时,可以将有关系的表,尽量放在一个库中。如,主从表,使用一样的表下标。使用广播表,避免跨库查询。转载 2022-10-12 20:59:08 · 111 阅读 · 0 评论 -
分库分表 Sharding: 6. Sharing 最佳实践
默认是根据表分片键(字段)的值,来路由到相应的表,如 条件 where userid =3, 则 3%6=3, 就会路由到表 orders3。如下,基本名称为 ds 的 3 数据库,有 6 个表,表基本名称为 user。如:"ds [0,3].test [1,3,4,5]" 表示:test={ds0=[1, 3], ds3=[4, 5]}不分片的表,无需额外添加逻辑处理。转载 2022-10-12 20:58:19 · 298 阅读 · 0 评论 -
分库分表 Sharding: 5. 分片流程与 Sharding 核心问题
1) 使用实体 Javabean (+ 条件表达式 Condtion,对应 SQL 的 where 表达式) 传达操作 DB 的信息;6.4 另外,avg 要使用专门的 ShardingAvgEngine,进行改写 Sql, 合并结果,并处理结果.多库多表,只指定库 (全表);5.2 若是单库多表,且有分页,支持 union all, 不是多表查询,优化查询;6.1 改写 sql 引擎对 sql 改写 (更新具体下标), 并记录对应的 ds。4.1 改写 sql 引擎对 sql 改写,并记录对应的 ds。转载 2022-10-12 20:53:40 · 211 阅读 · 0 评论 -
分库分表 Sharding: 5. 分片流程与 Sharding 核心问题
1) 使用实体 Javabean (+ 条件表达式 Condtion,对应 SQL 的 where 表达式) 传达操作 DB 的信息;6.4 另外,avg 要使用专门的 ShardingAvgEngine,进行改写 Sql, 合并结果,并处理结果.多库多表,只指定库 (全表);5.2 若是单库多表,且有分页,支持 union all, 不是多表查询,优化查询;6.1 改写 sql 引擎对 sql 改写 (更新具体下标), 并记录对应的 ds。4.1 改写 sql 引擎对 sql 改写,并记录对应的 ds。转载 2022-10-12 20:50:00 · 167 阅读 · 0 评论 -
分库分表 Sharding: 4. 路由 / 映射:如何找到要操作的表
但在分库分表时,因没有指定分片值(分片键及其值),不知道是要查询基本表 table_name 对应的哪张表,所以会查询基本表下所有的实际表,从而引起全库全表的查询,即全域查询。根据表拆分的首要原则,就是要尽可能找到数据表中的数据在业务逻辑上的主体,并确定大部分(或核心的)数据库操作都是围绕这个主体的数据进行,然后可使用该主体对应的字段作为分片键,进行分库分表。通过观察和判断,发现,仅均匀分布每个库中的表的名称是相同的,只知道表名,无法由表名推断表所对应的库,因此不适合用来通用分片处理;转载 2022-10-12 20:48:45 · 856 阅读 · 0 评论 -
分库分表 Sharding: 3. 基本概念
也可以用不一样的后缀来表示不同的实际表,如 a,b,即 orders_a, orders_b。关联表指存在主外键关系的主表与从表,它们一般是一对多的关系,按照一定的 DB 设计原则将数据存放到两张表中。一般单表放在默认的数据库中,没有分片时,基本表即实际表,而数据源 ds 则默认路由到默认的 ds。指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。因此关联表的分片规则应使用一样的,同一个查询语句中,主从表应该有一样的下标(后缀)。),指某一基本表所涉及的所有数据库和对应的实际表。转载 2022-10-12 20:47:35 · 119 阅读 · 0 评论 -
分库分表 Sharding: 2. 分库分表种类
在分库分表的情况下,数据是如何拆分的呢?假设 db 库的 orders 表中原来有 4000W 条数据,现在将 db 库拆分为 2 个分库 db0 和 db1,orders 表拆分为 orders0、orders1、orders2、orders3 四个分表,每个分表存储 1000W 条数据 (可能因分片的值,数量略有差距)。垂直拆分,一般是为了划分服务,不同的团队负责的服务对应的表统一到不同的库中,利于开发和维护。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库。转载 2022-10-12 20:45:41 · 150 阅读 · 0 评论 -
分库分表总结2
分库分表总结21. 分片路由算法的种类?2. 正则表达式适合分库分表的分片算法吗??3.什么样的表需要进行分库分表?4. 电商系统哪些表需要作分库分表??原创 2022-02-20 23:08:46 · 153 阅读 · 0 评论 -
分库分表总结1
分库分表总结11. 什么样的SQL关键字会造成分库分表2. 什么样的where条件会造成查全表?3.什么样的sql语句会查全表?4.在对实体进行解析时考虑分库分表好,还是生成sql语句后才进行分库分表好???原创 2022-02-20 23:08:12 · 147 阅读 · 0 评论 -
mysql5.7主从模式参考
mysql5.7主从模式:https://dev.mysql.com/doc/refman/5.7/en/replication.html原创 2022-02-20 23:06:59 · 154 阅读 · 0 评论 -
Bee读写分离使用总结
Bee读写分离RW、主从模式2 读写分离RW、主从模式bee.dosql.multiDS.enable=true#支持同时使用多种类型数据库的数据源.#bee.dosql.multiDS.differentDbType=true#bee.dosql.multiDS.defalutDS=ds1#write DB just set one db.bee.dosql.multiDS.writeDB=ds1#bee.dosql.multiDS.readDB=ds2,ds3#poll:1, ran原创 2022-02-20 22:51:51 · 2500 阅读 · 0 评论 -
SQLServer分页
SQLServer支持使用 TOP + ROW_NUMBER() OVER 配合进行分页:SELECT * FROM (SELECT TOP (?) ROW_NUMBER() OVER (ORDER BY o.order_id DESC) AS rownum, * FROM t_order o) AS temp WHERE temp.rownum > ? ORDER BY temp.order_id支持 SQLServer 2012 之后的 OFFSET FETCH 的分页方式:S原创 2022-02-20 12:04:27 · 198 阅读 · 0 评论 -
熔断和限流
熔断阻断ORM(服务)和数据库的连接。 当某个服务节点超过负载后,停止该节点对数据库的访问,使数据库能够保证足够的资源为其他节点提供服务。限流面对超负荷的请求开启限流,以保护部分请求可以得以高质量的响应。...原创 2022-02-20 11:48:56 · 1076 阅读 · 0 评论 -
多租户及实现
什么是多租户多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。简单讲:在一台服务器上运行单个应用实例,它为多个租户(客户)提供服务。从定义中我们可以理解:多租户是一种架构,目的是为了让多用户环境下使用同一套程序,且保证用户间数据隔离。那么重点就很浅显易懂了,多租户的重点就是同一套程序下实现多用户数据的隔离。数据隔离方案多租户在数据存储上存在三种主要的方案,分别是:原创 2022-02-20 01:06:04 · 1477 阅读 · 0 评论 -
数据库中间件主流设计
数据库中间件主流设计1 数据库中间件的作用在未进行读写分离/分库分表的情况下,我们是直接在应用中通过数据源(c3p0、druid、dbcp2等)与数据库建立连接,进行读写操作,架构如下所示:可以看到在操作单库单表的情况下,我们是直接在应用中通过数据源(c3p0、druid、dbcp等)与数据库建立连接,进行读写操作。大部分开发人员对于访问单库的应用的架构都是很熟悉的。但是在进行读写分离/分库分表后,底层的数据库实例就会有多个,读写分离情况下一个master多个slave;分库分表的情况.原创 2022-02-20 00:55:34 · 416 阅读 · 0 评论 -
如何选择合适的分表键,路由规则及分片数
1 分表键的选择什么是分表键分表键即分库/分表字段,zebra里面叫做维度,是在水平拆分过程中用于生成拆分规则的数据表字段。Zebra 根据分表键的值将数据表水平拆分到每个物理分库中。数据表拆分的首要原则,就是要尽可能找到数据表中的数据在业务逻辑上的主体,并确定大部分(或核心的)数据库操作都是围绕这个主体的数据进行,然后可使用该主体对应的字段作为分表键,进行分库分表。业务逻辑上的主体,通常与业务的应用场景相关,下面的一些典型应用场景都有明确的业务逻辑主体,可用于分表键: 面向用户的互联原创 2022-02-20 00:47:28 · 1627 阅读 · 0 评论 -
ORM读写分离
读写分离介绍在单台mysql实例的情况下,所有的读写操作都集中在这一个实例上。当读压力太大,单台mysql实例扛不住时,此时DBA一般会将数据库配置成集群,一个master(主库),多个slave(从库),master将数据通过binlog的方式同步给slave,可以将slave节点的数据理解为master节点数据的全量备份。关于如何配置mysql主从同步,可以参考mysql官方文档:MySQL :: MySQL 5.7 Reference Manual :: 16 Replication从应用的角原创 2022-02-19 23:56:04 · 219 阅读 · 0 评论 -
分库分表种类
分库分表种类原创 2022-02-19 23:28:45 · 227 阅读 · 0 评论 -
数据分片相关的表
表是透明化数据分片的关键概念。 Apache ShardingSphere 通过提供多样化的表类型,适配不同场景下的数据分片需求。逻辑表相同结构的水平拆分数据库(表)的逻辑名称,是 SQL 中表的逻辑标识。 例:订单数据根据主键尾数拆分为 10 张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order。真实表在水平拆分的数据库中真实存在的物理表。 即上个示例中的t_order_0到t_order_9。绑定表指分片规则一致的主表和子表。 使用绑定...原创 2022-02-17 17:23:09 · 248 阅读 · 0 评论 -
数据 分片
背景 垂直分片 水平分片 挑战 目标背景传统的将数据集中存储至单一节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足海量数据的场景。从性能方面来说,由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度的增加也将使得磁盘访问的 IO 次数增加,进而导致查询性能的下降; 同时,高并发访问请求也使得集中式数据库成为系统的最大瓶颈。从可用性的方面来讲,服务化的无状态性,能够达到较小成本的随意扩容,这必然导致系统的最终压力都落在数据库之上。 而单一的数原创 2022-02-17 17:18:13 · 2893 阅读 · 0 评论 -
数据 节点
数据分片的最小单元,由数据源名称和真实表组成。 例:ds_0.t_order_0。逻辑表与真实表的映射关系,可分为均匀分布和自定义分布两种形式。均匀分布指数据表在每个数据源内呈现均匀分布的态势, 例如:db0 ├── t_order0 └── t_order1db1 ├── t_order0 └── t_order1数据节点的配置如下:db0.t_order0, db0.t_order1, db1.t_order0, db1.t_order1自定义分布原创 2022-02-17 17:24:13 · 700 阅读 · 0 评论 -
分库分表:分片
分片键用于将数据库(表)水平拆分的数据库字段。 例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段。 SQL 中如果无分片字段,将执行全路由,性能较差。 除了对单分片字段的支持,Apache ShardingSphere 也支持根据多个字段进行分片。分片算法用于将数据分片的算法,支持=、>=、<=、>、<、BETWEEN和IN进行分片。 分片算法可由开发者自行实现,也可使用 Apache ShardingSphere 内置的分片算法语法糖,灵活度非常高。...原创 2022-02-17 17:25:18 · 487 阅读 · 0 评论 -
分库分表:行表达式
实现动机配置的简化与一体化是行表达式所希望解决的两个主要问题。在繁琐的数据分片规则配置中,随着数据节点的增多,大量的重复配置使得配置本身不易被维护。 通过行表达式可以有效地简化数据节点配置工作量。对于常见的分片算法,使用 Java 代码实现并不有助于配置的统一管理。 通过行表达式书写分片算法,可以有效地将规则配置一同存放,更加易于浏览与存储。语法说明行表达式的使用非常直观,只需要在配置中使用${ expression }或$->{ expression }标识行表达式即可。...原创 2022-02-17 17:26:29 · 418 阅读 · 0 评论