我运行循环并在每个循环中密集查询大量数据。 我的数据库是使用Crate构建的。 有时,循环暂停,因为Crate没有响应 我的查询结果。 (但这并不总是发生)伪代码如下
from crate import client
class data_access(object):
def __init__(self, IP):
conn = client.connect(IP)
self.cursor = conn.cursor()
def get_report(self, event_id):
self.cursor.execute('''
select schema.events."Info", schema.events."Time"
from schema.events
where schema.events."Id"='%s' ''' % event_id)
event = []
for row in self.cursor:
event.append((row[0], row[1]))
return event
dal = data_access("server IP")
all_events = []
for event_id in event_ids:
events = dal.get_report(event_id)
if len(events) >0: all_event += events
event_ids
的长度可能是数百万,并且在每个循环中查询都是密集的。有没有使用Crate的数据库专家,遇到过这个问题?如果是,你是如何解决这个问题的?似乎重新启动数据库不起作用。非常感谢您的解决方案!
答案 0 :(得分:1)
我无法重现这一点,但我怀疑这可能是因为每次在循环内创建连接这一事实。我不会重新创建数百万次的连接,而是重写这一点,在循环外创建连接一次,然后将其传递给get_report
,如:
from crate import client
def get_report(event_id, conn):
cursor = conn.cursor()
cursor.execute('''
select schema.events."Info", schema.events."Time"
from schema.events
where schema.events."Id"='%s' ''' % event_id)
event = []
for row in cursor:
event.append((row[0], row[1]))
return event
all_events = []
conn = client.connect("server IP")
for event_id in event_ids:
events = get_report(event_id, conn)
if len(events) >0: all_event += events