C++ 哈希表企业级项目运用---淘宝分布式文件系统

简介: C++ 哈希表企业级项目运用---淘宝分布式文件系统

本篇文章是小编自己的见解 要是有什么不准确的地方欢饮评论区留言 讨论

项目背景: 根据淘宝统计 淘宝上面的卖家已经达到近1000万的虚拟店 有着上十亿的产品  每个产品大概具有大量的文字和图片(平均15k) 数据所占的空间在1PB以上

1PB是什么概念:

P1B=1024TB=1024*1024*1024MB

如果使用1T的磁盘来保存  则需要1024*1024*1024的磁盘来保存 这是不现实的 而且磁盘读写I/O的速度远远小于计算机从内存 高速缓存 读取数据的速度  当然也可以选择专门做存储的公司EMC

本篇主要是讲述C++ 哈希表企业级项目运用

下图是相关的关系:

所以 在这里建议使用C++ 数据结构 哈希表(散列表的使用 来优化其分布式存储)

大家在这里先了解一下淘宝分布式文件系统的文件存储模式

1.淘宝分布式系统文件是以block(块)文件储存的  每一块的文件都是由块索引 主块 扩展块构成

2.淘宝分布式系统文件是临时数据 需要变成永久性数据  淘宝分布式系统的文件存储使用了自研的数据库系统,称为Tair(Taobao Distributed Key-Value Storage System)。Tair是一种高性能、高可用性的分布式存储系统,旨在满足淘宝海量数据的存储和访问需求。它支持多副本机制以提供数据冗余和容错性,并且具备快速读写、高并发和水平扩展等特点,适用于大规模互联网应用场景。

3.此段 采用的是哈希表的存储优化

下图介绍

1.块信息 保存了每个主块的信息 这里主要指的是图片信息

2.哈希桶大小 :记录的是文件经过哈希核心算法所求得的索引 在这种大型项目中 建议P值就设为文件的数目

3.起始的偏移量的本质是文件指针(指向的是空文件的第一个空间) 在C++里面对应的是这三个大类

  1. ifstream:用于从文件中读取数据(输入操作)。
  2. ofstream:用于向文件中写入数据(输出操作)。
  3. fstream:既可以进行读取操作,也可以进行写入操作。

主块里面存储的是图片(非结构化数据)的空间  每一个索引值都代表了一个键值 每一个价值代表着对应的实际值  这样能大大加快查找的速度和访问效率 只需要将块索引放在计算机内存中 文件储存在淘宝的服务器上面

总结;

C++哈希表的应用主要是用于哈希表对数据的访问 可以极大的优化查询的效率 同时也是数据库优化的一个部分(但是更多的还是使用红黑树 )    同时将B树 B+树 B-tree树 红黑树进行对比使用   选出最好的优化方案

本篇文章的理解是建立在哈希表理解熟练的基础上才能理解 大家学习编程要一步一个脚印 在追求质量的同时追求速度  小编今天的内容就到这里了

对了 在这里小编想推荐一篇课程:https://xxetb.xetslk.com/s/2PjJ3T

相关文章
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
86 1
|
3月前
|
NoSQL Java Redis
面试官:项目中如何实现分布式锁?
面试官:项目中如何实现分布式锁?
102 6
面试官:项目中如何实现分布式锁?
|
2月前
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
65 3
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
573 3
|
3月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
57 3
|
4月前
|
资源调度 Java 调度
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
|
5月前
|
Rust 测试技术 编译器
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
|
4月前
|
存储 缓存 开发框架
看看 Asp.net core Webapi 项目如何优雅地使用分布式缓存
看看 Asp.net core Webapi 项目如何优雅地使用分布式缓存
|
5月前
|
存储 Serverless C++
【C++】手撕哈希表的闭散列和开散列
【C++】手撕哈希表的闭散列和开散列
65 1
|
4月前
|
编译器 C++ 开发者
Visual Studio属性表:在新项目中加入已配置好的C++库
通过以上步骤可以确保Visual Studio中新项目成功地加入了之前已配置好的C++库。这个过程帮助开发者有效地管理多个项目中共享的库文件,提升开发效率。
128 0