自愿索引
使用 SmartEDB 的时候,要访问数据库对象,唯一的办法就是通过一个或者几个索引。一般来说,在进行常规的数据库写入操作时,索引会被填充和更新。但是呢,给索引设置了自愿限定符,这就表示索引能在运行的时候启动或者删除。只有当应用程序明确提出要求,自愿索引才会进行填充和更新。这个特性能让应用程序做到下面这些:
在特定的时候,如果有些索引不需要,就能节省数据库内存。
在数据库写入操作期间,能节省更新索引需要的时间。
从另一方面来讲,如果应用程序不是每次操作都更新索引,那当应用程序决定通过调用索引创建的 API 来构建索引的时候,就会花些时间。
所以啊,SmartEDB 要求在一个类里(或者列表索引里)至少得有一个非自愿索引,这样才能扫描整个类的数据来构建自愿索引。还有一个可能出现的副作用,就是在重新创建索引的时候,可能会把数据库内存用完。而且,给一个持久类重新创建自愿索引,可能会因为要扫描的对象数量可能很多,所以会花费大量的时间。
对自愿索引的其他所有操作,都跟对其他常规索引的操作是一样的。
在 C API 里,自愿索引不会被构建,除非应用程序明确调用生成的函数 classname_indexname_create()
。同样的,应用程序能通过调用生成的函数 classname_indexname_drop()
来删除自愿索引。