本篇文章是小编自己的见解 要是有什么不准确的地方欢饮评论区留言 讨论
项目背景: 根据淘宝统计 淘宝上面的卖家已经达到近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++里面对应的是这三个大类
- ifstream:用于从文件中读取数据(输入操作)。
- ofstream:用于向文件中写入数据(输出操作)。
- fstream:既可以进行读取操作,也可以进行写入操作。
主块里面存储的是图片(非结构化数据)的空间 每一个索引值都代表了一个键值 每一个价值代表着对应的实际值 这样能大大加快查找的速度和访问效率 只需要将块索引放在计算机内存中 文件储存在淘宝的服务器上面
总结;
C++哈希表的应用主要是用于哈希表对数据的访问 可以极大的优化查询的效率 同时也是数据库优化的一个部分(但是更多的还是使用红黑树 ) 同时将B树 B+树 B-tree树 红黑树进行对比使用 选出最好的优化方案
本篇文章的理解是建立在哈希表理解熟练的基础上才能理解 大家学习编程要一步一个脚印 在追求质量的同时追求速度 小编今天的内容就到这里了
对了 在这里小编想推荐一篇课程:https://xxetb.xetslk.com/s/2PjJ3T