我有一个客户端 - 服务器Corba应用程序。对于某些调用,服务器向Client提供迭代器对象,因为返回的数据很大。当前实现 - 服务器从(MySQL)数据库中获取所有相关数据并保留在内存中,直到客户端完成检索所有数据(通过 getNext_n()调用)。已经存在对迭代器总数及其生命周期(Evictor模式)的限制。现在,如果大多数开放迭代器都有大量数据,则服务器有时会变为内存不足。
答案 0 :(得分:0)
您无需在Corba服务器上缓冲MySQL中的任何内容。 您可以在服务器上执行MySQL查询并将迭代器发送到客户端。 然后从MySQL查询结果集中获取一行并立即将其发送给客户端。并对结果集中的所有行重复此操作。
您需要注意的是为迭代器设置超时。客户端必须在一段时间内完成一次迭代。这个时间应该小于MySQL允许在结果集的两次行提取之间经过的时间。
此外,还需要超时,因为如果查询表中的数据在查询期间发生变化,则可以填充MySQL UNDO日志,如果获取结果需要花费太多时间。