IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Mapping

共 2 篇相关文章

IT 累计浏览 1,839

对象到数字 ID 的映射

这篇讲的是如何用一个高效的数据结构,为对象分配并管理短生命周期的数字 ID。 在像 skynet 这样的并行系统中,直接使用 C 指针来标识服务对象是危险的,容易引发悬垂指针、误释放等问题。因此,通常会用数字 ID 来间接引用。作者提出了一个具体的需求:既要快速映射,又希望尽量不复用已释放的 ID(避免误用),这与操作系统常见的文件句柄复用策略不同。 为了满足这个需求,核心方案是设计一张专门的哈希表。每次分配新 ID 时,在上次值的基础上递增,并检查哈希表中对应位置是否冲突,若冲突则继续递增。这保证了 key 永不冲突,让查询速度最快,且实现相对简洁。 更进一步,作者将这部分实现从 skynet 中抽离出来,做成了一个独立的开源库。文章详细介绍了其提供的 5 个 API(创建、销毁、分配、抓取、释放),并重点说明了为实现线程安全而采用的读写锁策略:对表的修改加写锁,而对 ID 的抓取和释放操作则加读锁,允许并发。这份实现还适配了 Windows 的原子操作。 整体上,这是一个解决特定工程问题的精巧数据结构,其实现思路(如不复用 ID 的哈希策略、引用计数与读写锁结合)对需要管理对象生命周期的系统设计很有参考价值。

IT 累计浏览 2,207

数据映射–映射概述

作者从“映射”这一计算机基础数据结构出发,梳理了从CPU到文件系统无处不在的映射关系。文章首先明确了映射的数学定义,并列举了它在查找文件、网络数据、数据库记录等场景中的关键作用。 接着,作者用一组简单对应(如2->4, 1->2)作为示例,对比了三种实现映射的方式:使用集合(如数组)存储键值对、定义一个数学函数、以及编写穷举算法。文章指出,后两种方式因需理解数据规律或硬编码而适用性有限,从而将讨论聚焦于更通用的集合类数据结构。 为了优化最基础的数组线性遍历效率低下的问题,文章深入介绍了两种核心的查找算法:要求数据有序的二分查找(时间复杂度O(log₂N)),以及利用哈希函数实现近乎O(1)效率的哈希查找。作者以哈希查找为例,解释了如何通过键值计算快速定位,并详细说明了“哈希碰撞”问题及使用链表解决的常见方法。 最后,文章总结道,不同的应用场景(如是否需要范围查询、自动扩展、磁盘存储或并行处理)将决定对映射集合的具体技术选择,而这些底层选择正是各类数据库性能差异的根源。