场景 - 分库分表

分什么

数据量大分表,并发大分库

分表字段如何选择

如果对交易订单进行分表,可以选择的东西很多,比如说商户id,用户id,地区等等

分表的时候要考虑到数据倾斜问题

数据倾斜

比如说按商户号进行分表,一共500w条数据,结果一个商户就有400w条的数据,这样来说 会有严重的数据倾斜问题

解决方案 二次分表

1. 二次分表

根据多个字段进行路由

查询的时候也是根据多个字段进行路由

2. 隔离

把严重数据偏移的商户数据,单独开一个数据库

数据倾斜问题可能导致 资源利用不均匀。

数据关联查询问题

如果订单表根据用户id进行分表

用户可以查询自己的订单

那商户如何查询用户的订单呢?

毕竟商户没有用户的id

解决方案 数据同步

买家表使用canal 做数据同步,将表中的数据同步到一个新的表(商户表)

这个表里面维护了 商家id 和 订单表的数据,根据商家id进行分库分表

商家不需要写入性能,只需要读取性能比较高

比如说可以采用HBASE数据库进行读取

数据id查询问题

如果我想根据订单id直接查询订单信息,如何进行查询呢?

因为此时,我没有路由的建,用户id

解决方案 基因法

生成id的策略可以定义为 订单id+分表路由

这样根据订单id 就可以知道数据存储在哪张表中

这张表根据订单id去做索引

当然还有别的方法,如果是其他无关紧要的数据,可以放入es,搜索引擎,从而对订单进行搜索

分表算法是什么

选择完分表字段了,如何选择分表算法呢?

直接取模

hash

关键字

一致性hash

一致性hash

一致性hash 很好的解决了,多次分表的问题(原来分128张表,现在增加到256张表)

hash环上面有32^2的虚拟节点

再把数据也hash到环上

id往前找到要进行存储的表

如果此时需要新增表,就通过一致性hash,将要加入的表映射到hash换上

这样会有一部分数据进行查找表的时候会有一定的影响

但是受到的影响已经很小了

这个时候可以再去做数据迁移

估计一下单表数据量

公式:( 非叶子节点层数 -1)* 一页内非叶子节点索引数 * 叶子节点的数据量

分表后 全局id如何生成

肯定不能用自增去弄,因为自增会导致id重复

UUID

太长了、无业务含义

雪花算法

雪花算法也有个问题

时间回拨,容易造成id的重复生成

分库分表事务

Seata

流程

TM 向 TC申请 XID

TM带着XID调用RM

RM向TC注册分支事务

TM告诉TC是否commit 或者是 rollback

由TC告知RM进行提交

跨库join

指定库名做join

数据冗余

宽表

es

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pnpm 安装后 node_modules 是什么结构?为什么 webpack 不识别 pnpm 安装的包?

本篇研究:使用 pnpm 安装依赖时,node_modules 下是什么结构 回顾 npm3 之前:依赖树 缺点: frequently packages were creating too deep dependency trees, which caused long directory paths issue on Windowspackages were c…

2024年 Flutter 面试题大全(持续更新中)

提示:页面中按 Ctrl F 查找关键字,点击链接跳转到详情 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。 &#x1f…

Php 通过 FFmpeg 获取远程视频的时长和截图

突然发现 FFmpeg 这个软件还可以直接拉取远程视频的相关信息,也就是可以不通过下载视频到本地的方式,直接远程去获取视频时长和截图。 假设我们的视频url是:http://my.com/a.mp4 第一步,Linux 安装 FFmpeg 软件 第二步&#xf…

Day 20 Linux的WEB服务——apache

WEB服务简介 目前主流的web服务器软件 Linux:apache , nginx Windows-server:IIS 服务器安装nginx或apache后,叫做web服务器(又称WWW服务器) web服务器软件属于C/S框架模型 web服务器是一种被动程序只…

薄板样条插值TPS原理以及torch和opencv实现

薄板样条插值TPS原理以及torch和opencv实现 1、薄板样条插值TPS原理概述原理以及公式推导2、torch实现3、opencv实现1、薄板样条插值TPS原理 概述 薄板样条(Thin Plate Spline),简称TPS,是一种插值方法,可找到通过所有给定点的“最小弯曲”光滑曲面。因为它一般都是基于…

[Android]Jetpack Compose页面跳转和传值

一、页面跳转和返回 1.添加 Navigation 依赖 在你的 build.gradle (Module)文件中, 添加 Navigation Compose 依赖。 dependencies {implementation ("androidx.navigation:navigation-compose:2.5.3") } 2.创建跳转页面 接下来&#xff…

MQTT协议应用场景

MQTT协议应用场景 MQTT(Message Queuing Telemetry Transport)协议是一种基于发布/订阅模式的轻量级消息传输协议,它设计用于低带宽、高延迟或不可靠的网络环境。由于其高效、简单和可靠性,MQTT在多种应用场景中得到了广泛的应用。…

leetcode hot100_part25

2024/4/23 56.合并区间 略 189.轮转数组 使用额外数组 遍历老数组,每个位置的元素放到新数组的位置(取余)。 环状替换 这个思路也想到了但是没想出来。 也就是连续跳,从i位置跳到它应该在(取余后)的位置x,再从x位…

UE4网络图片加载库(带内存缓存和磁盘缓存)

UE4网络图片加载库,带内存缓存和磁盘缓存,支持自定义缓存大小,支持蓝图和C++代码调用 1、调用示例 2、对外暴露函数 3、源代码-网络模块 KeImageNet.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreM…

Vue基于高德地图API封装一个地图组件

一、参考资料 高德开放平台 | 高德地图API (amap.com) 二、安装及配置 pnpm i vuemap/vue-amap --save man.ts 密钥及安全密钥需要自己到高德地图开放平台控制台获取. import { createApp } from vue import App from ./App.vue import router from ./router i…

java实现解析html获取图片或视频url

一、前言 有时在实际项目中,比如发布某篇文章,需要取文章中的某张图片作为封面,那么此时需要文章内容,获取html内容中的图片地址作为封面,下面讲下如何获取html中的图片或视频地址。 二、实现 1.先定义一个工具类&…

Python学习教程(Python学习路线+Python学习视频):Python数据结构

数据结构引言: 数据结构是组织数据的方式,以便能够更好的存储和获取数据。数据结构定义数据之间的关系和对这些数据的操作方式。数据结构屏蔽了数据存储和操作的细节,让程序员能更好的处理业务逻辑,同时拥有快速的数据存储和获取方…

智能合约语言(eDSL)—— 如何使用wasmtime运行合约

在我们使用高级语言生成了智能合约——WASM之后,接下来就是对智能合约——WASM的使用。首先,我们需要引入wasmtime库,使用wasmtime运行我们的合约。我们的Rust程序为: use anyhow::Result; use std::fs; use wasmtime::*;fn main…

android openGL ES详解

1、渲染线程与主线程的通信 两个线程之间的通信可以用如下方法: 在主线程中的 GLSurfaceView 实例可以调用 queueEvent( )方法传递一个 Runnable 给后台渲染线程,渲染线程可以调用 Activity 的 runOnUIThread()来传递事件 (event) 给主线程。 2、顶点…

Redhawk:ATE如何产生top level sta file

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 相关文章链接 redhawk: create STA file 在“redhawk: create STA file”一文中介绍了ate的用法,可以应对block level的设计,但当需要做top level分析时&

构建安全高效的前端权限控制系统

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 ✨✨ 帅哥美女们,我们共同加油!一起进步&am…

Qt实现XYModem协议(八)

1 概述 XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。使用循环冗余校验的与XMODEM相应的一种协议称为XMODEM-CRC。还有一种是XMODEM-1K&am…

单片机学习过程

继电器光耦隔离电压转换步进电机直流电机 arduino是最好用的一种,他提供了完整的设备库文件,任何外部设备只要查找相应的库,就可以很方便的使用 , 但是如果不去学习51 或stm32 或 嵌入式玩玩还可以,如果碰到没有实现的…

【深耕 Python】Data Science with Python 数据科学(10)pandas 数据处理(一)

写在前面 关于数据科学环境的建立,可以参考我的博客: 【深耕 Python】Data Science with Python 数据科学(1)环境搭建 往期数据科学博文: 【深耕 Python】Data Science with Python 数据科学(2&#xf…

使用 IPAM 解决方案简化分布式网络管理

随着组织在数字领域的全球扩张,分布式网络是不可避免的,这意味着,随着 IT 基础设施的发展,组织需要适应,这包括在不断增长的系统需求、应用程序堆栈、各种协议和安全防御中监控、现代化和简化流程和资源。在有效管理现…