类似于栈,先进后出
在 MySQL 中处置惩罚大量数据时,分库分表是一种常见的策略:
一、分库
- 垂直分库
- 按照业务模块将不同的数据表存储在不同的数据库中。例如,将用户相关的数据表放在一个库,订单相关的数据表放在另一个库。
- 优点:可以降低单个数据库的复杂度,提高特定业务模块的性能和可用性。
- 缺点:跨库关联查询变得复杂,需要通过应用层来处置惩罚。
- 水中分库
二、分表
- 将数据按照某种规则(如用户 ID 取模)分布到多个数据库中。
- 优点:可以有效应对数据量的增长,实现分布式存储和负载均衡。
- 缺点:数据的分布规则需要精心设计,数据迁徙和扩容相对复杂。
- 垂直分表
- 将一个表中不常用的字段、大字段或者长度较长的字段拆分到另一个表中。例如,将商品表中的详细形貌字段拆分到单独的表中。
- 优点:减少表的宽度,提高查询性能,便于维护。
- 缺点:增加了表关联的操作。
- 水中分表
- 按照肯定的规则(如主键值取模、按时间范围等)将一个表的数据拆分到多个表中。
- 优点:可以办理单表数据量过大的问题,提高查询服从。
- 缺点:同样存在数据分布规则设计和跨表查询的复杂性。
Docker 是一种重要的技能,理解如下:
- 隔离应用
- 把应用和其依靠打包在独立容器中,彼此隔离不干扰。
- 像 Web 应用和数据库应用能在同一主机上互不影响。
- 便于部署迁徙
- 容器包罗应用所需统统,能在不同环境快速部署,无视环境差别。
- 优化资源利用
- 能更精细分配资源,多个容器可共享主机资源。
- 支持版本控制与回滚
- 对容器镜像能版本控制,出问题可回滚。
- 促进开辟运维协作
- 开辟环境与生产一致,减少问题。
- 适合微服务架构
- 每个微服务可打包成容器,方便独立操作。
- 助力 CI/CD
- 与相关工具链集成,实现自动化流程。
- 性能
- Grpc 通常在性能方面表现更优,由于它使用二进制协议,数据传输服从高。
- Http 一般使用文本格式,数据量相对较大。
- 连接方式
- Grpc 支持长连接,能减少连接建立的开销。
- Http 常见的是短连接,每次哀求都要重新建立连接。
- 数据格式
- Grpc 基于 Protocol Buffers 定义数据格式,具有高效的序列化和反序列化能力。
- Http 可以使用多种数据格式,如 JSON、XML 等。
- 流处置惩罚
- Grpc 对双向流和服务器流的支持较好。
- Http 在流处置惩罚方面相对较弱。
- 统一版本
- 确定一个共同的 Go 版本,要求所有开辟人员安装和使用该版本。
- 可以通过项目规范和文档明确指定。
- 使用工具管理
- 利用版本管理工具,如 go.mod 和 go.sum 。
- 这些文件可以指定项目所依靠的特定 Go 版本和模块版本,确保不同开辟者在拉取代码时能够获取到一致的依靠环境。
- 容器化开辟环境
- 使用 Docker 等容器技能创建统一的开辟环境。
- 在容器中配置好指定的 Go 版本和相关依靠,开辟人员在容器中进行开辟,制止本地环境差别。
例如,一个大型电商项目可以将商品相关的 Protobuf 文件放在 goods/ 目次下,包括 goods_info.proto 、 goods_comment.proto 等。对于一些通用的错误码定义,可以提取到 common/error_code.proto 中供其他文件引用。
- 分包与分组
- 将相关功能或模块的消息定义分组到不同的 Protobuf 文件中。
- 例如,将用户相关的消息定义放在 user.proto ,订单相关的放在 order.proto 。
- 目次布局规划
- 创建清晰的目次布局来组织 Protobuf 文件。
- 可以按照业务模块、功能类型等划分不同的目次。
- 提取公共部分
- 如果有多个文件中存在重复或相似的定义,提取这些公共部分到单独的 Protobuf 文件中,然后其他文件进行引用。
- 版本控制
- 利用版本控制体系(如 Git)来管理 Protobuf 文件的变更历史。
- 文档注释
- 在 Protobuf 文件中添加详细的注释,阐明每个消息的用途、字段含义等,方便理解和维护。
- 定期审查与重构
- 定期对 Protobuf 文件进行审查,删除不再使用的定义,优化复杂的布局。
https://juejin.cn/post/7384303275376230411
可以看看这个,我自己总结的
Go 语言有诸多优势,如语法简洁高效,便于学习和编写;并发支持强大,goroutine 和 channel 让并发编程轻松;编译速率快,利于快速开辟;内存管理有自动垃圾回收;跨平台性好;性能出色,能满意高性能需求;尺度库丰富,涵盖众多领域。这些优势使其在云计算、后端开辟、网络编程等领域广泛应用。
在 Go 语言中,内置的 map 不是并发安全的。
如果在多个 goroutine 中同时对一个 map 进行读写操作,可能会导致不可预测的结果,例如数据竞争、步伐瓦解等。
例如,如果一个 goroutine 正在对 map 进行写入操作,而另一个 goroutine 同时在读取或删除元素,就可能出现问题。
为了在并发环境中安全地使用 map ,可以使用一些并发安全的替代方案,比如使用 sync.RWMutex 来加锁保护对 map 的操作,或者使用第三方库提供的并发安全的 map 实现。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |