像SELECT * FROM people
这样的查询可能会造成严重的内存问题,即许多人都喜欢称之为“#34;内存超出"”。
许多程序员使用迭代器调用以减少内存消耗。迭代器是一种"播放n暂停视频录制",意味着它们产生一个值,它们停止,它们产生一个值等等,避免一次性生成所有值。 Python中的一个例子如下:
def myIterator():
for i in range(10):
yield i * 2
现在,当使用迭代器从数据库中获取数据时,我感到非常困惑。我总是被告知要限制对数据库的查询数量,因为它可能成为瓶颈,并且使用迭代器,我似乎增加了查询的数量。是这样吗?迭代器如何处理数据库查询?这又是短床单的众所周知的问题吗?另外,如果在使用迭代器的获取阶段,在数据库中添加了一些数据,会发生什么?
P.S。我的问题与特定的编程语言无关,但一般来说都是如此。
答案 0 :(得分:0)
RDBMS在使用迭代器时起到了帮助作用。数据库客户端发送一个请求,DB向第一批行回复;一旦客户确认收到,服务器就会停止发送,然后等待。
DB客户端库允许使用迭代器的程序" digest"数据,直到程序迭代过去已经缓冲的数据。此时它要求RDBMS继续发送数据。
由程序决定如何处理数据。如果它没有将整个内容存储在内存中,它只会占用数据库客户端缓冲的数据。