分布式id、系统id、业务id以及主键之间的关系

推荐

连分布式ID都理解不了,你是刚培训出来冒充面试官的吧

1 分布式id、系统id、业务id以及主键之间的关系

  1. 分布式ID、系统ID、业务ID和主键的关系:
  • 分布式ID:在分布式系统中,由于存在多个独立的节点,为了保证每个节点生成的ID都是全局唯一的,就需要用到分布式ID。它是全局唯一的,可以用作数据库的主键。

  • 系统ID:一般用来在一个系统或者平台内部区分不同的用户、订单等,不一定是全局唯一的,所以不能用作分布式系统中的主键。

  • 业务ID:业务ID是根据业务逻辑生成的ID,它的生成规则可能会包含一些业务信息,如时间、地点等。它可以是全局唯一的,也可以只在某个业务范围内唯一。

  • 主键:数据库表中的主键是用来唯一标识一条记录的,它必须是唯一的。在分布式系统中,主键一般会使用分布式ID来保证全局唯一。

2 为什么不能用主键id充当订单id

  1. 为什么不能用主键ID充当订单ID?

主键ID是数据库中用于唯一标识记录的,而订单ID是业务中用来标识一个订单的。虽然在技术上可能可以使用主键ID作为订单ID,但这样做会有一些问题:

  • 从业务逻辑的角度看,订单ID一般需要包含一些业务相关的信息,如时间、订单类型等,而主键ID通常是无业务含义的。

  • 主键ID可能会由数据库自动递增生成,如果直接暴露给用户,可能会泄露一些敏感信息,如订单数量等。

  • 如果系统升级或迁移,主键ID可能会发生改变,这会影响到业务的持续性。

3 为什么业务id和主键id不能一样

  1. 为什么业务ID和主键ID不能一样?

业务ID和主键ID的生成规则和用途是不一样的。业务ID是根据业务逻辑生成的,可能会包含一些业务相关的信息,而主键ID一般是数据库自动生成的,没有业务含义。

另外,业务ID可能会因为业务的变化而变化,而主键ID一旦确定,就不应该发生改变。如果把业务ID和主键ID设置为一样的,那么当业务ID需要改变时,就可能会影响到数据库的主键,从而影响到数据的完整性。

4 分布式id是解决什么问题

  1. 分布式ID是解决什么问题?

分布式ID主要是解决分布式系统中全局唯一标识的问题。在分布式系统中,由于存在多个独立的节点,每个节点可能都需要生成ID,为了保证所有节点生成的ID都是全局唯一的,就需要使用分布式ID。

另外,分布式ID还可以解决一些其它的问题,如:

  • 数据库的分片问题:通过合理的设计分布式ID,可以将数据均匀的分布在不同的数据库或者表中,提高查询的效率。

  • 订单的生成问题:在电商等需要大量生成订单的业务中,分布式ID可以快速的生成大量的全局唯一的订单号。

  • 数据追踪问题:在复杂的系统中,通过分布式ID,可以更容易的追踪一条数据的流转过程。

分库分表和扩展

1. 怎么分库分表:

分库分表是为了解决单一数据库或者单一数据表承载量问题的一种常用的方法。分库是将一个数据库的数据拆分到多个数据库中,分表则是将一个表的数据拆分到多个表中。以下是分库分表的一般步骤:

  • 确定拆分的方式:分库还是分表,或者两者同时进行。这主要取决于你的系统瓶颈在哪里,是在单个数据库的处理能力,还是在单个表的数据量。

  • 设计拆分规则:这通常需要根据业务特点来进行,常见的方式有按照用户ID、地理位置、时间等进行拆分。

  • 修改应用程序:拆分后的数据库和表的结构与原来的不同,需要修改应用程序中的数据库操作代码。

  • 数据迁移:将原来的数据按照新的拆分规则迁移到新的数据库和表中。

  • 引入中间件:为了使应用程序对分库分表透明,通常会引入一些数据库中间件,如ShardingSphere、Mycat等。

2. 为什么分库分表要考虑引入一个横向扩展的分布式数据库呢?

横向扩展的分布式数据库,或称为数据库分片,能有效地处理大量数据和高并发的情况。通过将数据分散到多个数据库节点上,可以提高系统的处理能力和吞吐量,从而提高系统的可扩展性和稳定性。

另外,引入一个横向扩展的分布式数据库,还可以提高数据的可用性。如果一个节点出现故障,其他节点还可以继续提供服务,从而保证了系统的可用性。

最后,使用分布式数据库,可以简化分库分表的操作。很多分布式数据库产品,如CockroachDB、TiDB等,都提供了内建的分片功能,可以自动进行数据的分布和迁移,大大简化了分库分表的操作。

3. 分库分表跟ID的关系:

分库分表的策略往往与ID有关。ID是一个常用的拆分依据,例如:

  • 可以按照用户ID进行拆分,比如将用户ID为奇数的用户的数据存储在一组数据库中,将用户ID为偶数的用户的数据存储在另一组数据库中。

  • 可以按照订单ID进行拆分,比如按照订单ID的某几位进行哈希,然后根据哈希值来决定存储到哪个数据库或者哪个表中。

此外,分布式ID生成策略也常被用于分库分表。通过在ID中包含一些特定的信息,比如时间、机器编号等,可以用于直接或间接地决定该数据应该存储在哪个数据库或哪个表中。例如,Twitter的Snowflake算法就是一个常用的分布式ID生成策略。

分库分表、水平划分和垂直划分都是数据库架构中为了解决数据量大或者并发访问量大导致的性能问题而采用的策略。他们之间的关系和特点如下:

  1. 分库分表:分库是指将一个数据库拆分为多个数据库,分表则是将一个大表拆分为多个小表。分库分表可以既包含水平划分也可以包含垂直划分,具体取决于分库分表的方式。

  2. 水平划分(Horizontal Partitioning):是指按照数据的行进行拆分,将一个表的数据根据某些规则分散到多个具有相同结构的表中。例如,根据用户ID的奇偶性进行分表,所有奇数ID的用户数据存放在一张表,偶数ID的用户数据存放在另一张表。这种方式是分库分表的一种常用策略。

  3. 垂直划分(Vertical Partitioning):是指按照数据的列进行拆分,将一个表的某些列数据拆分到另一个或多个表中。例如,一个用户信息表,包含用户的基本信息和详细信息,可以将基本信息和详细信息分别存放在两个表中。垂直划分也可以用于分库,将不同的表放到不同的数据库中。

总结来说,分库分表是为了解决数据库性能问题的一个总体策略,而水平划分和垂直划分则是实现分库分表的具体技术手段。

水平划分和水平扩展数据库很像,都借用了分片吗

是的,水平划分和水平扩展的数据库(也称为分布式数据库或数据库分片)在很多方面是相似的,它们都是通过将数据分散到多个数据库或数据表中来提高系统的性能和可扩展性。实际上,你可以将水平划分看作是水平扩展的一个子集或者具体实现方式。

水平划分是在应用程序层面进行的,它需要应用程序知道如何路由到正确的数据库或表,因此通常需要修改应用程序的代码。而水平扩展的数据库,如Cassandra,MongoDB和Google Cloud Spanner等,通常会提供一个统一的接口,应用程序可以像访问一个单一的数据库一样访问它,由数据库系统自动处理数据的分布和路由。

在水平划分和水平扩展的数据库中,都会使用到分片的概念。分片是指将数据划分为多个独立的部分,每个部分称为一个分片,每个分片可以存储在不同的物理设备上。分片的规则可以根据业务需求来定,常见的规则有按照范围分片、按照哈希分片等。

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

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

相关文章

苍穹外卖-day07

苍穹外卖-day07 本项目学自黑马程序员的《苍穹外卖》项目,是瑞吉外卖的Plus版本 功能更多,更加丰富。 结合资料,和自己对学习过程中的一些看法和问题解决情况上传课件笔记 视频:https://www.bilibili.com/video/BV1TP411v7v6/?sp…

CSS盒子模型(HTML元素布局)

CSS盒子模型是一种用于描述HTML元素布局的模型,它将每个元素看作是一个矩形的盒子,每个盒子由内容、内边距、边框和外边距组成。 盒子模型包括以下几个部分: 内容区域(Content) 内容区域是盒子中实际显示内容的部分&am…

Rust vs Go:常用语法对比(五)

题图来自 Rust vs Go 2023[1] 81. Round floating point number to integer Declare integer y and initialize it with the rounded value of floating point number x . Ties (when the fractional part of x is exactly .5) must be rounded up (to positive infinity). 按规…

KWP2000协议和OBD-K线

KWP2000最初是基于K线的诊断协议, 但是由于后来无法满足越来越复杂的需求,以及自身的局限性,厂商又将这套应用层协议移植到CAN上面,所以有KWP2000-K和KWP2000-CAN两个版本。 这篇文章主要讲基于K线的早期版本协议,认…

零售企业信息化系统建设与应用解决方案

导读:原文《零售企业信息化系统建设与应用解决方案ppt》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 完整版领取方式 如需获取完整的电子版内容参考学习…

基于Kaggle训练集预测的多层人工神经网络的能源消耗的时间序列预测(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🌈3 Matlab代码实现 🎉4 参考文献 💥1 概述 本文为能源消耗的时间序列预测,在Matlab中实现。该预测采用多层人工神经网络,基于Kaggle训练集预测未来能源消耗。 &am…

使用镜像搭建nacos集群

安装并配置 docker 1 先安装docker //1.查看操作系统的发行版号 uname -r//2.安装依赖软件包 yum install -y yum-utils device-mapper-persistent-data lvm2//3.设置yum镜像源 //官方源(慢) yum-config-manager --add-repo http://download.docker.co…

第十二章:priority_queue类

系列文章目录 文章目录 系列文章目录前言priority_queue的介绍priority_queue的使用容器适配器什么是容器适配器STL标准库中stack和queue的底层结构 总结 前言 priority_queue是容器适配器,底层封装了STL容器。 priority_queue的介绍 priority_queue文档介绍 优先…

IDEA中文UT方法执行报错问题、wps默认保存格式

wps默认保存格式、IDEA中文UT方法执行报错问题 背景 1、wps修改文件后,编码格式从UTF-8-bom变成UTF-8(notepad可以查看); 2、IDEA中文UT执行报错: 解决方案 1、语言设置中不要勾选 “Beta版。。。。” 2、cmd中执…

ARM裸机-1

1、ARM公司成长史 1.1、ARM发展的里程碑1 ARM的前身为艾康电脑(Acorn),于1978年,于英国剑桥创立。 在1980年代晚期,苹果电脑开始和艾康电脑合作开发新版的ARM核心。 1985年开发出全球第一款商用RISC(精简指…

layui框架学习(33:流加载模块)

Layui中的流加载模块flow主要支持信息流加载和图片懒加载两部分内容,前者是指动态加载后续内容,示例的话可以参考csdn个人博客主页,鼠标移动到页面底部时自动加载更多内容,而后者是指页面显示图片时才会延迟加载图片信息。   fl…

RocketMQ 行业分享

5.0的架构发生了重大调整,添加了一层rocketmq-proxy,可以通过grpc的方式接入。 参考 https://juejin.cn/post/7199413150973984827

UE5 关于MRQ渲染器参数

最佳参数: Spatial Sample Count:使用奇数样本时临时抗锯齿会收敛 Temporal Sample Count:超过2之后,采样过大会造成TAA效果不佳 TSR:UE5最好的抗锯齿方案

AI聊天GPT三步上篮!

1、是什么? CHATGPT是OpenAI开发的基于GPT(Generative Pre-trained Transformer)架构的聊天型人工智能模型。也就是你问它答,根据网络抓去训练 2、怎么用? 清晰表达自己诉求,因为它就是一个AI助手&#…

CF1837 A-D

A题 题目链接:https://codeforces.com/problemset/problem/1837/A 基本思路: 要求计算蚂蚱到达位置 x最少需要多少次跳跃,并输出蚂蚱的跳跃方案。因为每次可以向左或向右跳跃一定距离(距离必须为整数),但是…

Web自动化测试高级定位xpath

高级定位-xpath 目录 xpath 基本概念xpath 使用场景xpath 语法与实战 xpath基本概念 XPath 是一门在 XML 文档中查找信息的语言XPath 使用路径表达式在 XML 文档中进行导航XPath 的应用非常广泛XPath 可以应用在UI自动化测试 xpath 定位场景 web自动化测试app自动化测试 …

联想拯救者笔记本切换独显直连游戏体验翻倍、火力全开“嗨”起来

最早的游戏本是由独显负责图形运算,然后直接向屏幕输出所有画面的。但独显负责所有工作,无时无刻都在耗电;撇开游戏模式下高负载的功耗不谈,即便在省电模式下功耗也比核显高得多。 英伟达发布的Optimus混合输出技术,在…

C++继承

📟作者主页:慢热的陕西人 🌴专栏链接:C 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容讲解了C继承部分相关的内容 文章目录 C继承Ⅰ. 继承的概念和…

Rviz2的自定义插件开发基础知识

1. 简介 Rviz中有不同类型的插件,每个插件都必须具有相应的基本类型,才能被RViz识别 plugin typebase typeDisplayrviz_common::DisplayPanelrviz_common::PanelToolrviz_common::ToolFrames transformation libraryrviz_common::transformation::Fram…

深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。 function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。 近期有同学反馈,function_score 的相关参数不好理解,本文将深入探讨 f…