84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
如何使用C++实现一个文件型数据库,所有的内容储存在磁盘中,并且能够处理较大的数据,性能较好。
如果需要完成这样的一个系统,需要学习一些什么方面的知识,能不能给一些较为基本的实现?
谢谢!
SQLite源代码
1.首先需要数据库的知识,如何实现ACID特性;其中,系统锁是一个重要的点,用的不好性能下降严重;2.既然谈到锁,用什么来实现锁可以单独做为一块知识,文件互斥锁、系统信号量等;3.索引是个重点,一般数据库用B+树来建立索引,当然,你也可以使用C++ STL内建的容器来装载索引(如map的红黑树)4.文件数据库,一般会有内存映射,将文件映射到内存中操作(mmap的实现);如果数据库的管理进程和应用进程是独立的,本地访问,会用到共享内存的知识;基于跨机及通用的方式,会用到网络的知识(TCP、socket通信);5.看一些专业数据库的源代码,毕竟自己能想到的前人都做的很完善了,可在前人基础上再提高;参考:sqlite、Berkeley DB等);
可以参考C实现的SQLite,这里有个不错的SQLite手册,方便了解SQLite实现:http://www.cnblogs.com/stephen-liu74/archive/2012/03/09/2328757.html
SQLite源代码
1.首先需要数据库的知识,如何实现ACID特性;其中,系统锁是一个重要的点,用的不好性能下降严重;
2.既然谈到锁,用什么来实现锁可以单独做为一块知识,文件互斥锁、系统信号量等;
3.索引是个重点,一般数据库用B+树来建立索引,当然,你也可以使用C++ STL内建的容器来装载索引(如map的红黑树)
4.文件数据库,一般会有内存映射,将文件映射到内存中操作(mmap的实现);如果数据库的管理进程和应用进程是独立的,本地访问,会用到共享内存的知识;基于跨机及通用的方式,会用到网络的知识(TCP、socket通信);
5.看一些专业数据库的源代码,毕竟自己能想到的前人都做的很完善了,可在前人基础上再提高;参考:sqlite、Berkeley DB等);
可以参考C实现的SQLite,这里有个不错的SQLite手册,方便了解SQLite实现:
http://www.cnblogs.com/stephen-liu74/archive/2012/03/09/2328757.html