如果自己用 C, Go 之类静态语言实现一个数据库, 类似 MongoDB, Redis, 应该怎样做?
具体要考虑哪些问题, 需要用到哪些算法?
作为一个前端弱弱问一下...
如果自己用 C, Go 之类静态语言实现一个数据库, 类似 MongoDB, Redis, 应该怎样做?
具体要考虑哪些问题, 需要用到哪些算法?
作为一个前端弱弱问一下...
欢迎造轮子
。
以Mongodb
为例:
然后,你需要一个
接着,可以开始造了
当然,还需要有相应的数据库知识。。
先留个问题反问你,为什么想起问这个问题?
开始… 想实现一套高性能的数据库系统,需要掌握的知识点基本是『操作系统』这门课的大部分章节+『数据结构』部分内容+『编译原理』部分内容。
具体如下:
『操作系统』
1 io处理及磁盘调度:高性能数据库往往不用操作系统自带的文件系统,而直接使用裸设备,采用aio.kio等方式提高读写性能。并且通过日志模式实现事务(实际上模仿现代日志型文件系统)
2 内存管理 为提高性能,数据库系统不能完全依赖宿主操作系统的内存管理能力。可能自己实现内存段页交换,及虚拟内存的实现
3 进程线程调度 高性能的重要因素之一,优良的进线程调度算法是数据库并发情况下性能的决定因素。
『数据结构』
主要涉及了 平衡二叉树,b树b+树方面内容。用于索引结构的维护。
『编译原理』涉及sql脚本语言解释器的编写
随手一些,估计有漏。
2 回答718 阅读✓ 已解决
1 回答837 阅读✓ 已解决
1 回答774 阅读✓ 已解决
1 回答534 阅读✓ 已解决
2 回答863 阅读
1 回答987 阅读
1 回答744 阅读
你可以关注一下SSDB作者的博客:
http://www.ideawu.net/blog/ssdb
SSDB是一个比Redis存储能力更强的高性能多线程NoSQL数据库。
网络IO模型对比(转):
Memcached(libevent):多线程,epoll事件驱动.
Redis(aeEvent):单线程,epoll事件驱动.
SSDB(LevelDB引擎,epoll网络):多线程,epoll事件驱动.
SSDB新版本采用了多线程模型,避免写操作阻塞读操作:
1个主线程,负责网络IO.
10个读线程,负责像scan复杂操作读.
1个写线程,负责写操作磁盘IO.
1个leveldb的compact线程.
也就是set写操作时,一个主线程负责网络,一个写线程负责leveldb操作;而get读操作时只有主线程在工作.