tera中的表格由ColumnFamilyDescriptor、LocalityGroupDescriptor、TableDescriptor三个数据结构进行描述。
描述一个列族的属性。 属性支持动态更新。更新状态为最终一致,过程中存在分片之前属性不一致情况,使用时需要注意。
设定列族内cell的TTL(time-to-live),单位秒,默认无穷大。 当列族内某cell的更新时间超过此值后,读取时被屏蔽,并在垃圾回收时物理删除。
void SetTimeToLive(int32_t ttl) = 0;
int32_t TimeToLive() const = 0;
设定列族内cell的最大版本数,默认为1。 当某cell的版本数超过此限制后,会将最旧的版本进行屏蔽,并在垃圾回收时物理删除。 此值不做最大值限制,但随着版本数大量增加,相应的随机读、扫描性能会下降,存储使用上升,用户可按实际情况调整。
void SetMaxVersions(int32_t max_versions) = 0;
int32_t MaxVersions() const = 0;
const std::string& LocalityGroup() const = 0;
int32_t Id() const = 0;
描述一个locality group的属性。
const std::string& Name() const;
void SetStore(StoreType type) = 0;
StoreType Store() const = 0;
enum StoreType {
kInDisk = 0,
kInFlash = 1,
kInMemory = 2,
};
void SetBlockSize(int block_size) = 0;//设定、获取物理文件内部block大小,单位KB,默认值:4。
int BlockSize() const = 0;
int32_t SstSize() const = 0;//设定、获取物理文件内部block大小,单位KB,默认值:4。
void SetSstSize(int32_t sst_size) = 0;
void SetCompress(CompressType type) = 0;
CompressType Compress() const = 0;
设定、获取是否使用bloom filter,默认不使用。
void SetUseBloomfilter(bool use_bloomfilter) = 0;
bool UseBloomfilter() const = 0;
是否使用内存内compact。
bool UseMemtableOnLeveldb() const = 0;
void SetUseMemtableOnLeveldb(bool use_mem_ldb) = 0;
设定、获取内存compact中写缓存大小,单位KB。
int32_t MemtableLdbWriteBufferSize() const = 0;
void SetMemtableLdbWriteBufferSize(int32_t buffer_size) = 0;
设定、获取内存compact中对应block大小,单位KB。
int32_t MemtableLdbBlockSize() const = 0;
void SetMemtableLdbBlockSize(int32_t block_size) = 0;
表格描述符主体,LocalityGroupDescriptor、ColumnFamilyDescriptor由其管理。 描述表格全局属性,如key拼装方式、分片分裂合并阈值、ACL等信息。 使用场景
- 表格创建,通过tera::Client::CreateTable
- 表格Schema更新,通过tera::Client::UpdateTable
- 获取表格属性,通过tera::Client::GetTableDescriptor
设置、返回表格名。
void SetTableName(const std::string& name);
std::string TableName() const;
其中,LocalityGroup名长度需要小于256字节,字符只支持{[a-z],[A-Z],[0-9],'_','-'}
LocalityGroupDescriptor* AddLocalityGroup(const std::string& lg_name);
bool RemoveLocalityGroup(const std::string& lg_name);//如果此LG中还有列族存在,删除失败。
LG在表格内部以vector形式保存,id为其对应的下标。
const LocalityGroupDescriptor* LocalityGroup(int32_t id) const;
const LocalityGroupDescriptor* LocalityGroup(const std::string& lg_name) const;
void SetCompress(CompressType type) = 0;
CompressType Compress() const = 0;
int32_t LocalityGroupNum() const;
若‘lg_name’不存在,返回NULL。其中列族名长度需要小于256字节,字符只支持{[a-z],[A-Z],[0-9],'_','-'}。
ColumnFamilyDescriptor* AddColumnFamily(const std::string& cf_name, const std::string& lg_name = "lg0");
void RemoveColumnFamily(const std::string& cf_name);
列族在表格内部以vector形式保存,id为其对应的下标。
const ColumnFamilyDescriptor* ColumnFamily(int32_t id) const;
const ColumnFamilyDescriptor* ColumnFamily(const std::string& cf_name) const;
int32_t ColumnFamilyNum() const;
决定了表格的存储及访问格式,推荐kBinary。
void SetRawKey(RawKeyType type);
RawKeyType RawKey() const;
enum RawKeyType {
kReadable = 0,
kBinary = 1,
kTTLKv = 2,
kGeneralKv = 3,
};
当分片数据量(物理存储)超过此阈值时,会被一分为二,并可能被两个不同服务器加载。 此分裂阈值是一个基础参考值,系统会根据实际动态负载在此值基础上进行调整。
void SetSplitSize(int64_t size);
int64_t SplitSize() const;
当分片数据量(物理存储)低于此阈值时,会被合并至相临分片中。 此值是一个基础参考值,系统会根据实际动态负载在此值基础上进行调整。 需要小于分裂阈值的1/3,防止出现合并、分裂的循环出现。
void SetMergeSize(int64_t size);
int64_t MergeSize() const;
当此表格数据没有强特久化需求时,可以选择关闭日志。 会大幅提升写性能、降低系统IO消耗。 当有服务器宕机时,内存中数据将丢失,谨慎关闭。
void DisableWal();
bool IsWalDisabled() const;
void EnableTxn();
bool IsTxnEnabled() const;
void SetAdmin(const std::string& name);
std::string Admin() const;
void SetAdminGroup(const std::string& name);
std::string AdminGroup() const;