Я использую PonyORM как ORM для моей базы данных SQLite с Python 3.5 на Raspberry PI 3 (не самое быстрое устройство, которое вы можете себе представить, но это не должно быть так уж плохо).PonyORM, производительность SQLite
Некоторые операции, например, вставок, кажутся очень медленными. Одна вставка объекта, содержащего 3 коротких строки, может занимать 4 - 10 секунд.
Вот мой datamodel.py файл:
from pony.orm import *
from datetime import datetime
db = Database('sqlite', 'website.db', create_db = True)
class User(db.Entity):
login = Required(str, unique=True)
password = Required(str)
actions = Set("Event")
class Event(db.Entity):
description = Optional(str)
date = Required(datetime)
ip = Required(str)
user = Optional(User)
db.generate_mapping(create_tables = True)
Я также создал очень простой тест производительности:
from datamodel import *
from datetime import *
sql_debug(True)
totalTime = datetime.now()
with db_session:
constructTime = datetime.now()
Event(date = datetime.now(),
ip = '0.0.0.0',
description = 'Sample event!')
constructTime = datetime.now() - constructTime
totalTime = datetime.now() - totalTime
print(constructTime)
print(totalTime)
В результате образец этого:
GET NEW CONNECTION
BEGIN IMMEDIATE TRANSACTION
INSERT INTO "Event" ("description", "date", "ip", "classtype") VALUES (?, ?, ?, ?)
['Sample event!', '2016-03-08 23:05:15.066742', '0.0.0.0', 'Event']
COMMIT
RELEASE CONNECTION
0:00:00.000479
0:00:04.808138
Строка запроса SQL печатается довольно быстро, поэтому, я думаю, перевод здесь не проблема, но, как вы можете видеть, весь операция занимает несколько секунд.
В чем может быть причина? Есть ли способ улучшить это смехотворно долгое время?
Самостоятельные алгоритмы синхронизации не являются надежными точками данных. –
@ cricket_007 Вы предлагаете, чтобы мой метод измерения времени был плохим? Возможно, вы правы, может быть, это не точно, но в любом случае проблема возникает в реальном применении, когда она замерзает на несколько секунд, чтобы вставить данные в базу данных. – Rames
Я просто говорю, что количество ограниченных прогонов на одном компьютере не очень надежное, чтобы утверждать, что существует большая разница в скорости. Тем не менее, ORM в целом намного медленнее, чем сырые запросы. –