摘要:
go container/heap包提供了堆的实现。 更详细的定义见下面的链接 Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 (studygolang.com) 这里主要讲下怎么使用这个包来实现最小堆和最大堆 首先要定义一个满足下面这个接口的类型 ty 阅读全文
摘要:
数据密集型应用设计读书笔记第九章 分布式系统最重要的抽象之一就是共识(consensus):就是让所有的节点对某件事达成一致。 一致性保证 分布式系统中,有很多场景都需要一致性保证。例如选举,如果同时存在两个节点认为自己是主节点,那就是“脑裂”。“复制延迟”中也提到,一个写入请求不可能同时到达两个节 阅读全文
摘要:
数据密集型应用设计读书笔记第八章 分布式系统中有几大非常重要的麻烦,阻碍了人们的幻想。 使用分布式系统与在一台计算机上编写软件有着根本的区别,主要的区别在于,有许多新颖和刺激的方法可以使事情出错【1,2】。在这一章中,我们将了解实践中出现的问题,理解我们能够依赖,和不可以依赖的东西。下一章则探讨解决 阅读全文
摘要:
数据密集型应用设计读书笔记第七章 事务可以解决很多数据系统半路故障导致的各种问题。 事务是一个抽象层,允许应用程序假装某些并发问题和某些类型的硬件和软件故障不存在。各式各样的错误被简化为一种简单情况:事务中止(transaction abort),而应用需要的仅仅是重试。 从概念上讲,事务将多个对象 阅读全文
摘要:
数据密集型应用设计读书笔记第六章 这一篇在fabric分片实验的相关文件里我做过一些总结,所以这里简单提一下。 首先弄明白,分区和复制的区别。以及分区中仍旧可以用到复制技术。 分区的主要目的是为了可伸缩。 分区应该怎么分?键值数据,根据键划分,或者键的哈希后分区。 分区之后如果要支持更快更强大的查询 阅读全文
摘要:
数据密集型应用设计读书笔记第五章 有时候需要数据分布到不同机器上。 至少有以下三点理由,需要这么做: 1.可伸缩性:一台机器的存储量和处理能力有限 2.容错/高可用性:冗余提供存储和服务 3.延迟,在各地部署服务器,可以就近提供更快速的服务 如果只是想提高负载,有种办法是纵向伸缩,即共享架构,共享c 阅读全文
摘要:
数据密集型应用设计读书笔记第二章 速览了一遍,主要是搞明白一点:考虑清楚你的数据模型是怎么样的,从而考虑采用更合适的数据库。 传统上,使用SQL数据库的优点就是其处理多对多关系等复杂连接关系上比较优秀的能力,能够提供较为复杂的查询。 采用NoSQL数据库的背后有几个驱动因素,其中包括: 需要比关系数 阅读全文
摘要:
数据密集型应用设计读书笔记第一章。 现在的数据密集型应用,趋势是组件化。 存储数据,以便自己或其他应用程序之后能再次找到 (数据库(database)) 记住开销昂贵操作的结果,加快读取速度(缓存(cache)) 允许用户按关键字搜索数据,或以各种方式对数据进行过滤(搜索索引(search inde 阅读全文
摘要:
最近在刷leetcode,经常要使用sort包里面提供的查找和排序的函数,所以对其中使用比较多的方法做简单介绍。 首先是golang 标准库在线文档的索引 Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 (studygolang.com) 1.排序 对于 阅读全文
摘要:
排序算法的分类如下 各个算法的时间和空间代价如下 注:另外还有一个时间代价为O(N)的桶排序算法,局限性比较大,感兴趣可以另作了解。 那么,如何选择各个排序算法呢? 1. 首先,在待排序数组长度比较短的情况下,使用简单排序算法效果比较好。 在简单排序算法中,直接插入排序的平均情况是相对较好的。而简单 阅读全文