zoukankan      html  css  js  c++  java
  • boltdb的实现和改进

    整个代码不是很复杂,可以从代码中理解如何实现。

    特点:btree,很小巧,但实现了完整事务机制,稳定,即使丢电也不会导致数据库错误。

    整个结构如下:

    meta page (前两页) --- > freelist page (第三页)
                      |
                      -----> bucket page (属于leaf page 开始是第4页) -> branch page -> leaf page
                                     |
                                     ---------> inline page(放在bucket page上) 

    事务:

    修改会产生镜像页,在写入的时候,先写所有镜像页,然后再写指向镜像页的meta page,如果镜像页没写完,程序就崩溃了,不影响之前的数据,因为meta page没有指向镜像页,如果meta page只写了一半,那么可以用checkSum检查出来,meta page双备份。

    如果事务未提交,meta page不会指向镜像页,也就不会读到事务中的数据。

    问题:

    没做repetable_read级别的事务实现,直接serialize级别的,不允许同时写(但允许写时读),所以导致写入慢。

    默认每次写都刷盘,大大拉低速度。这个可以调。

    内存占用随着数据变得太大,这个我觉得是代码本身的问题,太多的东西序列化到了内存,这部分的代码也写得不好,太晦涩,难改。

    改进的方法?:

    增加一个持久层(线性写入)和内存层(用于查询,未写入boltdb之前写入内存),提升并发,然后再批量写入boltdb。

  • 相关阅读:
    无法启动IIS Express Web服务器 端口"1025"正在使用
    mysql查看是否锁表并解除锁
    C#的栈
    面向对象VS面向过程
    Visual Studio包管理器NuGet 依赖管理
    Vue中的Promise.all()
    【1024练习】Mybatis练习三
    【1023练习】MyBatis练习二
    【练习】mybatis
    【练习】json数组,以及json对象数组循环在页面的选择下拉框,ul列表,table等中显示出来
  • 原文地址:https://www.cnblogs.com/dearplain/p/8011725.html
Copyright © 2011-2022 走看看