从MySQL为Corba Iterator检索批量数据

时间:2016-05-12 07:40:56

标签: mysql iterator corba

我有一个客户端 - 服务器Corba应用程序。对于某些调用,服务器向Client提供迭代器对象,因为返回的数据很大。当前实现 - 服务器从(MySQL)数据库中获取所有相关数据并保留在内存中,直到客户端完成检索所有数据(通过 getNext_n()调用)。已经存在对迭代器总数及其生命周期(Evictor模式)的限制。现在,如果大多数开放迭代器都有大量数据,则服务器有时会变为内存不足。

  1. 处理此类情况的最佳方法是什么?
  2. 我们可以改为从块中获取数据(使用Limit)而不是本地缓存。但是,如果某些其他线程在表中插入/删除行; select会返回不一致的数据。反过来使用临时表意味着额外的磁盘使用量。 MySQL是否提供了处理此类场景的任何其他机制?

1 个答案:

答案 0 :(得分:0)

您无需在Corba服务器上缓冲MySQL中的任何内容。 您可以在服务器上执行MySQL查询并将迭代器发送到客户端。 然后从MySQL查询结果集中获取一行并立即将其发送给客户端。并对结果集中的所有行重复此操作。

您需要注意的是为迭代器设置超时。客户端必须在一段时间内完成一次迭代。这个时间应该小于MySQL允许在结果集的两次行提取之间经过的时间。

此外,还需要超时,因为如果查询表中的数据在查询期间发生变化,则可以填充MySQL UNDO日志,如果获取结果需要花费太多时间。