修改juicefs 源码使用oceanbase做为元数据存储

以前有说明让juicefs 支持oceanbase 的方式,但是在测试之后发现并不是很好,所以直接基于源码进行修改是一种很不错的方法

代码修改

  • 主要是meta 中sql.go
    具体需要的地方
    Init 地方, 删除对于mysql的特殊处理,NewSession 部分也需要
 
 // if m.db.DriverName() == "mysql" {
    //  m.updateCollate()
    // }

还有就是NewSession 部分重新同步结构的问题, 这部分我也是禁用了

    func (m *dbMeta) NewSession() error {
    go m.refreshUsage()
    if m.conf.ReadOnly {
        return nil
    }
    if err := m.db.Sync2(new(session)); err != nil { // old client has no info field
        return err
    }
    // if m.db.DriverName() == "mysql" {
    //  m.updateCollate()
    // }
    // update the owner from uint64 to int64
    // if err := m.db.Sync2(new(flock), new(plock)); err != nil {
    //  logger.Fatalf("update table flock, plock: %s", err)
    // }

构建

  • 构建
make juicefs

使用

  • docker-compose
version: "3"
services:
    ocenbase:
      image: oceanbase/obce-mini
      environment:
      - "OB_ROOT_PASSWORD=dalongrong"
      ports:
      - "2881:2881"
    s3:
      image: minio/minio
      environment:
      - "MINIO_ACCESS_KEY=minio"
      - "MINIO_SECRET_KEY=minio123"
      command: server /data --console-address ":9001"
      ports:
      - "9000:9000"
      - "9001:9001"
  • format
./juicefs format --storage minio \
    --bucket http://127.0.0.1:9000/jfs2 \
    --access-key minio \
    --secret-key minio123 \
    "mysql://root:dalongrong@(127.0.0.1:2881)/juicefs" \
    pics
  • mount
sudo ./juicefs mount  "mysql://root:dalongrong@(127.0.0.1:2881)/juicefs"  apps

一个参考延迟对比

注意对比不能说明多大的问题,因为ob 面向的是分布式集群的,我部署的是mini 的性能上是不能直接和单机的mysql 比的

  • ob 的

 

 

  • mysql 的

 

 

说明

目前juicefs 对于mysql 处理部分是挺怪异的,后边看看官方的issue,找下为啥进行了那么多的处理,而且大家可能也会碰到

 

 


解决方法, 但是目前此特性官方是没有直接开启的,所以还是慎重处理

 
ALTER system set _ob_enable_prepared_statement =true; 

参考资料

https://juicefs.com/docs/zh/community/databases_for_metadata

posted on   荣锋亮  阅读(238)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2021-01-08 gosimple/slug 生成url 友好的slug
2021-01-08 graphjin super-graph的升级版本
2021-01-08 编译cratedb 支持多集群节点部署
2020-01-08 email-templates 集成mjml 的另外一个方法
2020-01-08 email-templates + mjml 发送邮件
2019-01-08 Singer 学习三 使用Singer进行mongodb 2 postgres 数据转换
2019-01-08 Singer 学习二 使用Singer进行gitlab 2 postgres 数据转换

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示