Tôi đang phân tích nhật ký và chèn nó vào MySQL hoặc SQLite bằng SQLAlchemy và Python. Ngay bây giờ tôi mở một kết nối đến DB, và khi tôi lặp qua mỗi dòng, tôi chèn nó sau khi nó được phân tích cú pháp (Đây chỉ là một bảng lớn ngay bây giờ, không phải là rất có kinh nghiệm với SQL). Sau đó tôi đóng kết nối khi vòng lặp được thực hiện. Mã tóm tắt là:Chèn nhanh hơn các bản ghi vào một bảng với SQLAlchemy
log_table = schema.Table('log_table', metadata,
schema.Column('id', types.Integer, primary_key=True),
schema.Column('time', types.DateTime),
schema.Column('ip', types.String(length=15))
....
engine = create_engine(...)
metadata.bind = engine
connection = engine.connect()
....
for line in file_to_parse:
m = line_regex.match(line)
if m:
fields = m.groupdict()
pythonified = pythoninfy_log(fields) #Turn them into ints, datatimes, etc
if use_sql:
ins = log_table.insert(values=pythonified)
connection.execute(ins)
parsed += 1
hai câu hỏi của tôi là:
- Có cách nào để tăng tốc độ chèn trong khuôn khổ cơ bản này? Có thể có một Queue chèn và một số chủ đề chèn, một số loại chèn số lượng lớn, vv?
- Khi tôi sử dụng MySQL, khoảng 1,2 triệu bản ghi thời gian chèn là 15 phút. Với SQLite, thời gian chèn là hơn một giờ. Liệu sự khác biệt thời gian giữa các công cụ db có vẻ đúng hay không có nghĩa là tôi đang làm điều gì đó rất sai?
Tôi cũng nên nói rằng khi tôi tự hỏi về cách tăng tốc, ý tôi là có điều gì đó cơ bản mà tôi nên làm và không phải điều đó sẽ mang lại cho tôi lợi ích lớn (tức là ít nhất hơn 25% tăng tốc độ thời gian).Tốc độ không phải là bản chất ở đây, tôi chỉ tự hỏi nếu tôi đang làm một cái gì đó trong một cách đi bộ vì đây là tất cả mới với tôi. –