zoukankan      html  css  js  c++  java
  • persistent_storage_worker.go

    package engine

    import (
        "bytes"
        "encoding/binary"
        "encoding/gob"
        "github.com/huichen/wukong/types"
        "sync/atomic"
    )

    type persistentStorageIndexDocumentRequest struct {
        docId uint64
        data  types.DocumentIndexData
    }

    func (engine *Engine) persistentStorageIndexDocumentWorker(shard int) {
        for {
            request := <-engine.persistentStorageIndexDocumentChannels[shard]

            // 得到key
            b := make([]byte, 10)
            length := binary.PutUvarint(b, request.docId)

            // 得到value
            var buf bytes.Buffer
            enc := gob.NewEncoder(&buf)
            err := enc.Encode(request.data)
            if err != nil {
                atomic.AddUint64(&engine.numDocumentsStored, 1)
                continue
            }

            // 将key-value写入数据库
            engine.dbs[shard].Set(b[0:length], buf.Bytes())
            atomic.AddUint64(&engine.numDocumentsStored, 1)
        }
    }

    func (engine *Engine) persistentStorageRemoveDocumentWorker(docId uint64, shard uint32) {
        // 得到key
        b := make([]byte, 10)
        length := binary.PutUvarint(b, docId)

        // 从数据库删除该key
        engine.dbs[shard].Delete(b[0:length])
    }

    func (engine *Engine) persistentStorageInitWorker(shard int) {
        engine.dbs[shard].ForEach(func(k, v []byte) error {
            key, value := k, v
            // 得到docID
            docId, _ := binary.Uvarint(key)

            // 得到data
            buf := bytes.NewReader(value)
            dec := gob.NewDecoder(buf)
            var data types.DocumentIndexData
            err := dec.Decode(&data)
            if err == nil {
                // 添加索引
                engine.internalIndexDocument(docId, data, false)
            }
            return nil
        })
        engine.persistentStorageInitChannel <- true
    }

  • 相关阅读:
    我经历的IT公司面试及离职感受(转)
    一个优异的经理人,碰到糟糕的企业,最后往往存在的还是那间糟糕的企业(转)
    Android TextView和EditText属性详解
    Android EditText控件行尾为表情时的BUG
    Android安全问题 抢先拦截短信
    Android安全问题 抢先开机启动
    Android安全问题 抢先接收广播
    Android安全问题 抢先接收广播
    Android 监听EditView中的文本改变事件
    Android EditText中插入图片并响应点击事件
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7461675.html
Copyright © 2011-2022 走看看