【发布时间】:2019-06-25 01:52:03
【问题描述】:
我正在开发一个需要处理大量数据的程序,但我想先将这些数据保存在本地存储结构中,然后再将其迁移到数据库。所以,我的问题是:保存该数据的最佳文件类型(或本地存储结构)是什么(这是结构化的,为此,我们假设它只是一个 id 和一个名称),以某种方式可以进行搜索和插入优化吗?
我的文件是 CSV 文件,因为数据是结构化的,这样可以保存相对大量的数据(在这种情况下,我需要大约 1000 到 100 000 行),但我不确定是否存在外面有什么更好的吗?我的想法是按名称的字母顺序对数据进行排序,因此在最坏的情况下,搜索操作将采用 O(n)。至于插入操作,鉴于我无法在两行之间插入一行,因此我必须在插入后覆盖整行我想要的那个。 (我也想过将整个文件读入一个列表,然后再写一遍,但如果文件太大,这不是最好的实现。
那么,谁能给我一些关于要使用的最佳文件类型的想法,以及哪种方法最适合插入和搜索优化?非常感谢!
(这是我的插入算法,但它会产生随机行为)
def writingOpt(firstName, lastName, birthdate, country):
try:
file = open("players.csv", "r+", newline='')
except FileNotFoundError:
print("File players.csv not found")
else:
with file:
reader = csv.reader(file)
writer = csv.writer(file)
name = firstName + ' ' + lastName
inserted = False
previousRow = []
previousPosition = 0
for row in reader:
if name < row[0]:
file.seek(previousPosition)
if not inserted:
previousRow = [name, birthdate, country]
inserted = True
writer.writerow(previousRow)
previousRow = row
previousPosition += len(','.join(row))
【问题讨论】:
-
使用
pandas库。 -
除非只是为了学习目的,否则你就是在浪费时间重新发明众所周知的方轮 - 这个问题已经被关系数据库解决了,你不会做任何更好或更快的事情Python 和一个 csv 文件。
-
@has 我试试看,谢谢!
-
@brunodesthuilliers 就关系数据库的概念而言,我想要完成的并不是完全“重新发明轮子”,而是以某种方式找到一种方法将我的数据临时保存在本地存储结构中,同时找到就规范化和图表而言,构建我的数据库模型的最佳方式。因为我想要的数据需要从一个结构不断变化的网站中抓取
-
你会在 csv 中遇到同样的问题 - csv 结构也必须改变。在最坏的情况下,您可以在适当的数据库字段中提取数据的恒定部分(用于搜索的部分)并将其余部分存储为 json blob(至少在找到更好的解决方案之前)。一些 rdbms 现在已经原生支持 json 字段,但是即使您不想担心设置合适的数据库服务器,您仍然可以同时使用 sqlite - 它是本地存储,并且针对搜索和插入进行了优化。
标签: python performance csv memory optimization