ob爲什麼同時存在兩種迭代接口的代碼

(cell接口、row接口)

oceanbase的早期版本類似於一個key-value no sql 系統,所以採用的是cell接口,讀寫是以cell爲基本單位。

oceanbase0.4以及後續的版本,才真正可以稱作一個數據庫,所以cell接口已經不適應當前的設計,所以就採用了row接口,以row爲迭代的基本單位。

這也是現在在oceanbase代碼中有兩套接口並存的原因,以後cell接口會逐漸廢棄。

1.cell
struct ObCellInfo
{//完整版
ObString table_name_; //table name
uint64_t table_id_; //table id
ObRowkey row_key_; //rowkey
uint64_t column_id_; //column id
ObString column_name_; //column name
ObObj value_; //value
};

struct ObInnerCellInfo
{//簡化版
  uint64_t table_id_;
  ObRowkey row_key_;
  uint64_t column_id_;
  ObObj value_;
};

2.row
class ObRow
{
ObRowkey rowkey_; //rowkey
ObRawRow raw_row_; //row的實際存儲數組
const ObRowDesc* row_desc_; //row描述符(table_id,column_id到實際存儲數組位置的映射)
}

class ObRowkey
{
    ObObj* obj_ptr_;          //指向rowkey列在raw_row_ array的起始位置
    int64_t obj_cnt_;         //rowkey列的列數
}

class ObRawRow
{
    ObObj cells_[MAX_COLUMNS_COUNT]; //row obj存儲array
    int16_t cells_count_; //rowkey cell count
}

class ObRowDesc
{
    Desc cells_desc_[MAX_COLUMNS_COUNT]; //(table_id,column_id)
    int64_t cells_desc_count_; //desc count
    PlacementHashMap<Desc, int64_t> hash_map_; //(table_id, column_id)到存儲位置的映射
    int64_t rowkey_cell_count_; //rowkey cell count
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章