我的个人博客 个人技术日志

设计一个文件系统,需要考虑哪些因素?

文件系统的实现在对文件有了基本认识之后,现在是时候把目光转移到文件系统的实现上了。之前用户关心的一直都是文件是怎样命名的、可以进行哪些操作、目录树是什么,如何找到正确的文件路径等问题。而设计人员关心的是文件和目录是怎样存储的、磁盘空间是如何管理的、如何使文件系统得以流畅运行的问题,下面我们就来一起讨论一下这些问题。文件系统布局文件系统存储在磁盘中。大部分的磁盘能够划分出一到多个分区,叫做磁盘分区(disk partitioning) 或者是磁盘分片(disk slicing)。每个分区
作者:admin 分类:未分类 浏览:81 评论:0

分布算法之一致性哈希算法

用一定的哈希算法(哈希函数等)将一组服务器的多个(数目自己设定)节点随机映射分散到0-232之间,由于其随机分布,保证了其数据平均分布的特点;用同一算法计算要存储数据的键,根据服务器节点确定其存储的服务器结点,由于每次用同一算法计算,所以得出的结果是相同的,使其查找定位准确;查找数据时,再次用同一算法计算键,并查找服务器的数据结点;如果有一个服务器宕机,消除其服务器结点,并将数据放在下一个结点上,由于随机节点位置的随机性,所以数据被其他服务器平均负载,也就降低了宕机影响。需要注意的是,这个环形空
作者:admin 分类:未分类 浏览:79 评论:0

直击本质-位运算

从元素的全排列找全组合,比穷举略好,但还不是最好的方法,毕竟它”绕了一次道”。很多算法都能通过位运算巧秒地解决,其优势主要有两点:一者位运算在计算机中执行效率超高,再者由于位运算语义简单,算法大多直指本质。组合算法也能通过位运算实现。思想再次考虑全组合的需求,从 M 个元素中取任意个元素形成组合,组合内元素不能重复、元素位置无关。之前的方法都是从结果组合是否满足要求来考虑问题,考虑组合是否有重复元素、是否已有同样的组合等条件。如果换种思路,从待选元素上来考虑呢?对于每个元素来说,它的状态就简单得
作者:admin 分类:未分类 浏览:73 评论:0

从排列到组合-分治

穷举毕竟太过暴力,我们来通过分治思想来重新考虑一下这个问题:分治思想分治的思想总的来说就是”大事化小,小事化了”,它将复杂的问题往简单划分,直到划分为可直接解决的问题,再从这个直接可以解决的问题向上聚合,最后解决问题。从 M 个元素中取出 N 个元素整个问题很复杂,用分治思想就可以理解为:首先,如果我们已经从 M 中元素取出了一个元素,那么集合中还剩下 M-1 个,需要取的元素就剩下 N-1 个。还不好解决的话,我们假设又从 M-1 中取出了一个元素,集合中还剩下 M-2 个,需要取的元素只剩下
作者:admin 分类:未分类 浏览:107 评论:0

迷人的算法-排列组合

最近工作中碰到一个需求:我们的数据表有多个维度,任意多个维度组合后进行 group by 可能会产生一些”奇妙”的反应,由于不确定怎么组合,就需要将所有的组合都列出来进行尝试。抽象一下就是从一个集合中取出任意元素,形成唯一的组合。如 [a,b,c] 可组合为 [a]、[b]、[c]、[ab]、[bc]、[ac]、[abc]。要求如下:组合内的元素数大于 0 小于等于 数组大小;组合内不能有重复元素,如 [aab] 是不符合要求的组合;组合内元素的位置随意,即 [ab
作者:admin 分类:未分类 浏览:64 评论:0

Caffeine批量加载浅析

最近项目中的本地缓存,看是从Guava改成了Caffeine,据说是性能更好,既然性能更好的话,那么就用起来吧。不过在使用过程中,发现了单个load和批量loadall方面的一些小设置,记录一下。一般说来,我们获取单条记录的时候,一般都是 cache.get(id),当数据过期,会从提前设定好的load方法中获取数据。同样的,如果我们想批量获取记录的时候,一般都是用cache.getAll(ids),当数据过去,会从提前设定好的loadAll方法中获取数据。实际在测试的时候,发现,利用如下的缓存
作者:admin 分类:未分类 浏览:105 评论:0