摘要: 有一些日子没有仔细关注SQLite了,今天打开其主页,发现其最新的版本已经是3.6.22了,更让我惊喜的是它的用户越来越多,而且邮件列表的关注者也越来越多,突然觉得自己已经太old了。惊喜的同时,不得不聊上几句了。  阅读全文
posted @ 2010-01-27 19:32 arrowcat 阅读(1376) | 评论 (20)编辑
     摘要: 分区是数据库管理系统实现并行处理的一种重要手段。MySQL从5.1开始,开始支持分区这一神奇的功能。但是,目前,MySQL做得还不够多(相对于Oracle),还处于开始阶段,查询优化没有充分利用分区带来的并行优势;不过,它正在努力,有理由相信它能够做好。早在关系数据库出现初期,并行数据库就随之而生,以Teradata为代表的商业化产品已经得到市场的广泛认可,而且也是数据库系统发展的方向。2003年,MySQL从Ericsson公司取得NDB存储引擎,从此,开始了并行数据库之路。 分区并不等于并行数据库。但是,通过分区,能够为数据库管理系统带来某些并行特性,比如并行I/O,并行查询。也许将并行数据库与NDB Cluster一起讨论会更好。但是,分区与并行本来就有一种天然的联系。了解并行数据库的基本概念,才能真正理解分区;同样,理解分区,又会加深对并行数据库的理解。So,enjoy it。  阅读全文
posted @ 2009-12-24 21:36 arrowcat 阅读(1408) | 评论 (5)编辑
     摘要: 复制(replication)是分布式数据库系统重要的特征之一,几乎所有的现代数据库管理系统都不同程度的支持复制。复制带来的好处很明显,数据分布式存储,随之而来的其它一系列优点:负载均衡,高可用性,高性能,容错等等。但是,另一方面,它增加了系统管理的复杂性,尤其是更新的开销,这是数据分布无法避免的。不管怎样,复制都是建立一个高性能、高可用性的分布式数据库平台的起点。所以,享受它吧。  阅读全文
posted @ 2009-12-19 11:33 arrowcat 阅读(276) | 评论 (10)编辑
     摘要: 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为 4K,并存储100条记录。如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页面在磁盘上随机分布,需要进行10^4次I/O,假设磁盘每次I/O时间为10ms(忽略数据传输时间),则总共需要100s(但实际上要好很多很多)。如果对之建立B-Tree索引,则只需要进行log100(10^6)=3次页面读取,最坏情况下耗时30ms。这就是索引带来的效果,很多时候,当你的应用程序进行SQL查询速度很慢时,应该想想是否可以建索引。  阅读全文
posted @ 2009-10-28 20:24 arrowcat 阅读(630) | 评论 (4)编辑
     摘要: 最早接触的MySQL是在三年前,那时候MySQL还是4.x版本,很多功能都不支持,比如,存储过程,视图,触发器,更别说分布式事务等复杂特性了。但从5.0(2005年10月)开始,MySQL渐渐步入企业级数据库的行列了;复制、集群、分区、分布式事务,这些企业级的特性,使得现在的MySQL,完全可以应用于企业级应用环境(很多互联网公司都用其作为数据库服务器,尽管节约成本是一个因素,但是没有强大功能作后盾,则是不可想象的)。虽然,MySQL还有很多不足,比如,复制、分区的支持都十分有限、查询优化仍需要改进,但是MySQL已经是一个足够好的DBMS了,更何况它是 opensource的。这段时间没有事,出于好奇,略微的研究了一下MySQL,积累了一些资料,欲总结出来。这些资料打算分为两部分,上部主要讨论 MySQL的优化,其中主要参考了《MySQL Manual》和《High Performance MySQL》,如果有时间,以后在下部分析一下MySQL的源码。如果你是MySQL高手,希望你不吝赐教;如果你是新手,希望对你有用。  阅读全文
posted @ 2009-10-18 21:52 arrowcat 阅读(2035) | 评论 (5)编辑
     摘要: 关于Windows的关键代码段(Critical Sections) 和自旋锁(Spinlocks)的小结  阅读全文
posted @ 2009-09-29 17:41 arrowcat 阅读(351) | 评论 (0)编辑
     摘要: 2、协议相关2.1、第3层协议的管理在Linux内核中,有两种不同目的的3层协议:(1) ptype_all管理的协议主要用于分析目的,它接收所有到达第3层协议的数据包。(2) ptype_base管理正常的3层协议,仅接收具有正确协议标志符的数据包,例如,Internet的0x0800。注意sb_buff与net_device中几个字段的区别:sb_buff:unsigned short pr...  阅读全文
posted @ 2009-09-26 11:39 arrowcat 阅读(291) | 评论 (0)编辑
     摘要: 1、接收帧当网络适配器接收到数据帧时,就会触发一个中断,中断处理程序执行一些需要及时处理的任务,然后在下半部进行其它可以延迟的处理。中断处理程序主要进行以下一些操作:(1) 分配sk_buff数据结构,并将接收到的数据帧从网络适配器I/O端口拷贝到sk_buff缓冲区中;(2) 从数据帧中提取出一些信息,并设置sk_buff相应的参数,这些参数将被上层的网络协议使用,例如skb->proto...  阅读全文
posted @ 2009-09-26 10:41 arrowcat 阅读(420) | 评论 (0)编辑
     摘要: 2.1、网络设备的注册与注销注册网络设备发生在下列情形: (1)加载网卡驱动程序 网卡驱动程序如果被编译进内核,则它在启动时被初始化,在运行时被作为模块加载。无论初始化是否发生,所以由驱动程序控制的网卡都被注册。 (2)插入可热拔插网络设备 当用户插入一块热拔插网卡,内核通知其对应的驱动程序以注册设备。(为了简单化,我们假定设备驱动程序已经被加载)。两个主要的情形会导致设备注销:(1)卸载网卡...  阅读全文
posted @ 2009-09-23 20:42 arrowcat 阅读(428) | 评论 (0)编辑
     摘要: 网络设备(network device)概述  阅读全文
posted @ 2009-09-22 21:49 arrowcat 阅读(522) | 评论 (2)编辑
     摘要: 套接字缓存(socket buffer)概述  阅读全文
posted @ 2009-09-19 10:02 arrowcat 阅读(383) | 评论 (0)编辑
     摘要: 同步阻塞I/O、同步非阻塞I/O、异步阻塞I/O与异步非阻塞I/O  阅读全文
posted @ 2009-09-18 19:32 arrowcat 阅读(302) | 评论 (0)编辑
     摘要: 3、套接字的实现套接字最先是在UNIX的BSD版本实现的,所以也叫做BSD套接字,它隐藏了各个协议之间的差异,并向上提供统一的接口。Linux中实现套接字的基本结构:3.1、BSD套接字3.1.1、核心数据结构为了实现BSD套接字,内核提供一个重要的数据结构struct socket,它的定义如下:[代码]3.1.2、BSD套接字初始化[代码]sock_init在系统初始化的被调用:3.1.3、B...  阅读全文
posted @ 2009-09-17 20:42 arrowcat 阅读(444) | 评论 (0)编辑
     摘要: 1、TCP/IP参考模型为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型。尽管OSI的体系结构从理论上讲是比较完整的,但实际上,完全符合OSI各层协议的商用产品却很少进入市场。而使用TCP/IP 协议的产品却大量涌入市场,几乎所有的工作站都配有TCP/IP协议,使得TCP/IP 成为计算机网络的实际的国际标准。2、套接字(socket) socket是操作系统...  阅读全文
posted @ 2009-09-17 19:47 arrowcat 阅读(315) | 评论 (0)编辑
     摘要: VACUUM命令是SQLite的一个扩展功能,模仿PostgreSQL中的相同命令而来。若调用VACUUM带一个表名或索引名, 则将整理该表或索引。在SQLite 1.0中,VACUUM命令调用 gdbm_reorganize()整理后端数据库文件。SQLITE 2.0.0中去掉了GDBM后端,VACUUM无效。在2.8.1版中,VACUUM被重新实现。现在索引名或表名被忽略。当数据库中的一个对象...  阅读全文
posted @ 2009-09-16 20:22 arrowcat 阅读(279) | 评论 (0)编辑
     摘要: 索引与order by的实现  阅读全文
posted @ 2009-09-16 20:11 arrowcat 阅读(342) | 评论 (0)编辑
     摘要: 文件系统的相关数据结构  阅读全文
posted @ 2009-09-11 21:29 arrowcat 阅读(209) | 评论 (0)编辑
     摘要: Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 2.2、睡眠与唤醒 在操作系统中,睡眠和唤醒原语实际上是操作系统的基本原语,也是实现同步的一种方式,而且它还是实现信号量的基础。当进程请求的资源(如内存、文件等)不能得到满足时,就会主动放弃CPU,进入等待状态(可中断等待或者不可中断等待)。当资源满足时,就会由别的进程...  阅读全文
posted @ 2009-09-02 12:34 arrowcat 阅读(174) | 评论 (0)编辑
     摘要: 1、概述同步问题是操作系统中的经典问题,它伴随着并发处理而自诞生。现代体系结构中常见的并发处理情况可以分为如下三种情况:(1)多个线程在单处理器上执行——多线程编程(2)多个线程在多处理器上执行——并行计算(3)多个线程在分布的多个处理上执行——分布式计算相应的编程也分成三种情况:共享变量编程、分布式(基于消息)编程和并行编程...  阅读全文
posted @ 2009-09-01 20:19 arrowcat 阅读(176) | 评论 (0)编辑
     摘要: 1、上下文一般来说,CPU在任何时刻都处于以下三种情况之一:(1)运行于用户空间,执行用户进程;(2)运行于内核空间,处于进程上下文;(3)运行于内核空间,处于中断上下文。应用程序通过系统调用陷入内核,此时处于进程上下文。现代几乎所有的CPU体系结构都支持中断。当外部设备产生中断,向CPU发送一个异步信号,CPU调用相应的中断处理程序来处理该中断,此时CPU处于中断上下文。在进程上下文中,可以通过...  阅读全文
posted @ 2009-08-31 18:43 arrowcat 阅读(219) | 评论 (0)编辑