动态字段
SmartEDB 支持两种类型的字段:固定大小字段(如 int、float 和 date 等)以及动态或可变大小字段(如字符串、向量、可变二进制、序列数据和可选结构体)。这些动态字段可以在运行时创建、扩展和缩减。为了高效管理这些字段,SmartEDB 采用了巧妙的设计,将动态字段存储为指向实际数据所在内存页面的指针,而不是直接放在对象的固定大小内存布局中。
为了实现这一功能,SmartEDB 使用了两种不同的内存布局方式。第一种是固定记录布局,它虽然不能改变大小,但能够在单个页面上容纳多个类实例(对象),从而节省空间。第二种是由小内存页组成的树状布局,允许类实例的大小在运行时动态调整。这种树状布局非常适合处理动态字段,但在数据库模式设计阶段需要考虑额外的开销。相比之下,固定大小的记录则以更紧凑的形式保存数据,提高了存储效率。
对于空的动态字段,仅需占用两个字节(适用于小于64K的紧凑类)或四个字节(适用于常规类)。当您向这些字段添加值时,类实例(对象)会相应增大;而当您删除或减小值的大小时,对象实例也会随之缩小,但仍会保留树状布局的正常内存开销。SmartEDB 运行时提供了一个内部机制,用于自动整理内存碎片并压缩动态字段,确保系统始终高效运行。
在操作动态字段时,有两点特别需要注意:
- 在执行插入操作之前,请确保已分配好结构向量的成员。
- 对于 string、wstring 或 nstring 类型的字段,只有当接收缓冲区足够大时,get 操作才会在缓冲区末尾添加一个空终止符。
我们希望这些信息能帮助您更好地理解和使用 SmartEDB 的强大功能。