摘要:
主要来自 "How does database indexing work?" 本文适用于 MongoDB、MySQL 等多种使用 B tree 作为索引数据结构的数据库。 为什么需要索引? 当数据储存到基于磁盘的储存设备上时,数据被储存为数据块。磁盘块的结构与链表一样;都是一部分包含数据,一个指针 阅读全文
摘要:
垃圾[1]回收是一种自动管理内存的方式。通常认为手动内管理[2]与垃圾回收相反。 就像其他内存管理技术,垃圾回收可能占据大部分程序处理时间,因而对性能有很大影响。 垃圾回收通常不处理内存之外的资源,比如网络 sockets、数据库 handles、用户交互界面和文件与设备描述符。常用的管理上述资源的 阅读全文
摘要:
Python 的内存管理是自动的。Python 使用引用计数和垃圾回收来管理内存。 引用计数:每个对象有一个引用它的对象的数目。引用计数为 0 的对象被视作垃圾。当一个引用它的对象创建时,引用计数加一,当一个引用它的对象销毁时,引用计数减一。 引用计数有一些缺点,其中一个是它不能处理循环引用。 因为 阅读全文
摘要:
本文主要参考 https://docs.python.org/3/howto/sockets.html 。 本文只讨论 STREAME(比如 TCP) INET(比如 IPv4) socket。 在多种 "跨进程通信" 方式中,sockets 是最受欢迎的。对于任意给定的平台,有可能存在其他更快的跨 阅读全文
摘要:
MongoDB 根据分片键分割 collection 中的文档,然后分配到分片集群的成员中。 分片键可以是一个存在于每个文件中的索引字段或者复合索引字段。 MongoDB 使用不同范围的分片键值来分割 collection 中的数据。不同分片键范围是不重叠的并且每个分片键范围与一个 chunk 关联 阅读全文
摘要:
创建配置服务复制集 通过 找到三个配置服务实例的 IP。 比如 , 又由于 的默认端口为 27019。所以配置服务的地址为 configsvr0: 172.17.0.2:27019 configsvr1: 172.17.0.3:27019 configsvr2: 172.17.0.4:27019 初 阅读全文
摘要:
分片是将数据分配到不同机器的方法。 拥有很大数据量的数据库系统或者高吞吐量的应用会挑战单机的能力上限。比如,高的查询率会耗尽服务器的 CPU 能力,大于系统内存的工作集会对磁盘设备的 IO 造成压力。 MongoDB 通过分片支持水平扩容。水平扩容指将系统的数据集和负载分割到不同的服务器,通过增加服 阅读全文
摘要:
文件结构如下 除了 mod1.py,其他文件内容都为空。 mod1.py 如果 不为空,相对引用会根据 而不是 [2]。 Relative Import In Non Package 如果直接执行一个模块,那么它的 为 。Python 会认为这个模块是一个最顶层的模块,而不管这个模块在文件系统中的实 阅读全文
摘要:
启用三个 mongod 建立复制集。 MongoDB 版本选择目前最新的稳定版 。 通过 找到三个 mongod 实例的 。 比如 , 又由于端口为 mongod 默认的 27017。所以 mongod 的地址为 mongo0: 172.17.0.2:27017 mongo1: 172.17.0.3 阅读全文
摘要:
关于读写分离 由于写入主之后,同步到从有一个时间,所以读写分离会引发数据一致性问题。 MongoDB 通过复制集(Replica Set)来实现读写分离。 MongoDB复制集(Replica Set) 通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用。 当遇到复制集 阅读全文