事件管理
正如介绍页面所述,SmartEDB 提供了通过生存时间(TTL)特性自动删除过时数据库对象的能力,并且能够管理数据库对象的新增、删除、更新和检查点事件。这些功能的 Python API 在以下各节中进行了说明。
生存时间
目前,SmartEDB 的 Python API 尚不支持生存时间这一特性。我们正在努力扩展功能,以满足更多用户需求。
事件接口
SmartEDB 应用程序能够响应诸如创建、更新或删除数据库对象等数据事件。对于 Python 应用程序,DDL 事件声明会触发应用程序接收以下类型的数据库事件通知:添加新对象、删除对象或类的所有对象、检查点事件以及更新对象或其指定字段。这些事件是针对特定类的。例如,为类 A 设置的新事件处理程序不会在数据库中添加类 B 的对象时收到通知。
在模式中定义的事件声明决定了哪些事件会触发应用程序的通知。应用程序如何处理这些事件则由运行时的事件处理程序决定。在 Python 应用程序中,仅支持异步事件处理。
异步事件处理
在异步事件处理中,应用程序会为每种类型的事件生成一个单独的线程来处理。该事件线程调用 Connection 方法 waitEvent() 来等待指定的事件。当事件发生时,运行时会释放该线程,使其与其它线程并行运行,直到它完成处理并再次调用 waitEvent()。
在事件处理程序完成任务并重新调用 waitEvent() 之前,存在一小段时间窗口,可能会有新的事件实例化(事件不会排队)。为了最小化这个窗口,您可以将事件处理委托给另一个线程,使处理程序线程可以立即再次等待事件。如果无法容忍未处理事件的风险,应用程序可以维护一个未处理事件的单独表。
异步事件在事务提交之后才会被激活。如果在一个事务范围内添加了多个对象、删除了多个对象或更新了多个字段(这些字段都有等待触发的事件处理程序),那么所有这些处理程序都会同时被激活。
Python 应用程序启动时会启动事件处理线程,并让主应用程序线程暂停若干毫秒(通常 100 毫秒就足够了),以便事件处理线程能够开始监听。然后,主应用程序线程将继续进行正常的数据库处理。在终止时,应用程序将调用 Connection 方法 releaseAllEvents() 来释放所有事件,并停止事件处理线程。