oceanbase支持创建内存表吗?怎么创建的?

oceanbase支持创建内存表吗?怎么创建的?

@论坛小助手

根据文档库中的信息,OceanBase 数据库支持创建行存表,但并没有明确提到“内存表”这一概念。在数据库领域,“内存表”通常指完全存储在内存中的表,而 OceanBase 的行存表数据仍然会从内存(MemTable)逐步转储到磁盘(SSTable),因此严格意义上并不是传统意义上的“内存表”。

创建行存表

OceanBase 社区版支持通过 WITH COLUMN GROUP(all columns) 选项创建行存表。以下是具体步骤和示例:

  1. 默认配置
    如果租户的配置项 default_table_store_format 设置为 'row'(默认值),则创建的表默认为行存表。

  2. 显式创建行存表
    如果 default_table_store_format 不是 'row',可以通过以下 SQL 显式创建行存表:

    CREATE TABLE tbl1_cg (col1 INT PRIMARY KEY, col2 VARCHAR(50)) WITH COLUMN GROUP(all columns);
    

注意事项

  • 即使后续执行了 DROP COLUMN GROUP(all columns) 命令删除列组,表仍然保持为行存储格式。
  • 行存表适合频繁更新和小规模查询的场景。

关于内存特性

虽然 OceanBase 不支持传统意义上的“内存表”,但其 LSM-Tree 存储引擎将增量数据存储在内存中的 MemTable 中,直到达到一定阈值后才会触发转储到磁盘上的 SSTable。这种机制使得 OceanBase 在写入性能上具有显著优势。

如果需要更高的内存利用率或更快的访问速度,可以结合以下方法优化:

  • 调整租户内存中 MemTable 的比例,增加可写入内存。
  • 使用高性能 SSD 或 NVMe 磁盘减少转储延迟。

总结

OceanBase 社区版不支持传统意义上的“内存表”,但可以通过 WITH COLUMN GROUP(all columns) 创建行存表,并利用 LSM-Tree 的内存存储特性提升性能。如果您需要完全基于内存的表,请考虑其他专门设计的内存数据库产品。

依据的文档名称及段落标题:

检索到的文档如下:

  1. 创建表
  2. 内存管理概述
  3. 在您开始前
  4. MemTable
  5. 产品 FAQ
  6. 使用 MySQL 租户做常见数据库开发
  7. 关于表
  8. 内存相关日志
  9. 内存相关的视图
1 个赞

OB的表的写操作都在内存中,大的查询会使用磁盘数据,调大内存内参数,间接把这个表放入内存里 :rofl:

没听说过这个东西,ob本身就是准内存数据库

1 个赞

像hana这种?

你说的应该是buffer表,建议去官网查询下相关资料