由于我们尚未诊断的原因,当对包含100多万条文本记录的postgres数据库进行关键字搜索时,尽管我们已经实现了我们认为是提高场景性能的推荐方法(例如GIN索引和to\tsvectors),但仍会发生超时。
可能还有很多问题尚未解决,但作为一个临时解决方案,最初的google指向一个使用多处理模块管理/停止挂起查询的解决方案。例如:
import multiprocessing
import time
def run_problem_db_query(textFileSearchParameter, returned_statements):
retrieved_text_files = statements.extra(where=["textfiles_tsv @@ plainto_tsquery(%s)"], params=[textFileSearchParameter])
return retrieved_text_files
retrieved_text_files = None
p = multiprocessing.Process(target=run_problem_db_query, name="run_problem_db_query", args=(textSearch, retrieved_text_files))
p.start()
time.sleep(10)
p.terminate()
p.join()
即使是
few blogs
和
SO posts
是否推荐了此方法的版本,有哪些潜在问题(如果有)?
最终,我们当然希望修复查询以及数据库本身的任何潜在问题,但是除了消耗潜在的大量内存之外(
as mentioned here
),这种方法还有哪些潜在的陷阱?