迭代器在处理数据库时如何操作?

时间:2017-04-20 22:40:05

标签: sql database iterator

SELECT * FROM people这样的查询可能会造成严重的内存问题,即许多人都喜欢称之为“#34;内存超出"”。

许多程序员使用迭代器调用以减少内存消耗。迭代器是一种"播放n暂停视频录制",意味着它们产生一个值,它们停止,它们产生一个值等等,避免一次性生成所有值。 Python中的一个例子如下:

def myIterator():
  for i in range(10):
    yield i * 2

现在,当使用迭代器从数据库中获取数据时,我感到非常困惑。我总是被告知要限制对数据库的查询数量,因为它可能成为瓶颈,并且使用迭代器,我似乎增加了查询的数量。是这样吗?迭代器如何处理数据库查询?这又是短床单的众所周知的问题吗?另外,如果在使用迭代器的获取阶段,在数据库中添加了一些数据,会发生什么?

P.S。我的问题与特定的编程语言无关,但一般来说都是如此。

1 个答案:

答案 0 :(得分:0)

RDBMS在使用迭代器时起到了帮助作用。数据库客户端发送一个请求,DB向第一批行回复;一旦客户确认收到,服务器就会停止发送,然后等待。

DB客户端库允许使用迭代器的程序" digest"数据,直到程序迭代过去已经缓冲的数据。此时它要求RDBMS继续发送数据。

由程序决定如何处理数据。如果它没有将整个内容存储在内存中,它只会占用数据库客户端缓冲的数据。