• 还在篮子里

    分布式 KV 数据库使用 · 语雀

    QuickStart

    Install

    • need go env
    brew install go
    • get minikeyvalue
    git clone https://github.com/geohot/minikeyvalue.git && cd minikeyvalue

    Run

    run 3 volume on localhost

    PORT=3001 ./volume /tmp/volume1/
    PORT=3002 ./volume /tmp/volume2/
    PORT=3003 ./volume /tmp/volume3/

    also could use nginx under the hood

    run master on localhost

    ./mkv -volumes localhost:3001,localhost:3002,localhost:3003 -db /tmp/indexdb/ server

    Using

    # put "bigswag" in key "wehave"
    curl -v -L -X PUT -d bigswag localhost:3000/wehave
    
    # get key "wehave" (should be "bigswag")
    curl -v -L localhost:3000/wehave
    
    # delete key "wehave"
    curl -v -L -X DELETE localhost:3000/wehave
    
    # unlink key "wehave", this is a virtual delete
    curl -v -L -X UNLINK localhost:3000/wehave
    
    # list keys starting with "we"
    curl -v -L localhost:3000/we?list
    
    # list unlinked keys ripe for DELETE
    curl -v -L localhost:3000/?unlinked
    
    # put file in key "file.txt"
    curl -v -L -X PUT -T /path/to/local/file.txt localhost:3000/file.txt
    
    # get file in key "file.txt"
    curl -v -L -o /path/to/local/file.txt localhost:3000/file.txt

    Screeshot

    image.png

    BranchUsage

    API

    • GET /key
      • 302 redirect to nginx volume server.
    • PUT /key
      • Blocks. 201 = written, anything else = probably not written.
    • DELETE /key
      • Blocks. 204 = deleted, anything else = probably not deleted.

    ./mkv Usage

    Usage: ./mkv <server, rebuild, rebalance>
    
      -db string
            Path to leveldb
      -fallback string
            Fallback server for missing keys
      -port int
            Port for the server to listen on (default 3000)
      -protect
            Force UNLINK before DELETE
      -replicas int
            Amount of replicas to make of the data (default 3)
      -subvolumes int
            Amount of subvolumes, disks per machine (default 10)
      -volumes string
            Volumes to use for storage, comma separated

    Rebalancing (to change the amount of volume servers)

    # must shut down master first, since LevelDB can only be accessed by one process
    ./mkv -volumes localhost:3001,localhost:3002 -db /tmp/indexdb/ rebalance

    Rebuilding (to regenerate the LevelDB)

    ./mkv -volumes localhost:3001,localhost:3002 -db /tmp/indexdbalt/ rebuild

    Performance

    # Fetching non-existent key: 116338 req/sec
    wrk -t2 -c100 -d10s http://localhost:3000/key
    
    # go run thrasher.go lib.go
    starting thrasher
    10000 write/read/delete in 2.620922675s
    thats 3815.40/sec
    
    

    来源: Editing · QuickStart · 语雀