使用sqlalchemy测量mysql-server上的插入时间和查询时间

时间:2013-05-11 05:14:53

标签: mysql sql sql-server database-design sqlalchemy

我有一个使用sqlalchemy的python程序访问运行远程服务器的数据库。远程服务器上运行了mysql-server5.5。代码的相关部分如下所示。

log = core.getLogger()

engine = create_engine('mysql://root@192.168.129.139/nwtopology', echo=False)

Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()

class SourcetoPort(Base):
    """"""
    __tablename__ = 'source_to_port'
    id = Column(Integer, primary_key=True)
    port_no        = Column(Integer)
    src_address    = Column(String(32),index=True)

    #-----------------------------------------
    def __init__(self, src_address,port_no):
        """"""
        self.src_address = src_address    
    self.port_no     = port_no


#create tables
Base.metadata.create_all(engine)

#query code   
r_res = session.query(SourcetoPort).filter_by(src_address=str(packet.src)).first()

#insert code
entry = SourcetoPort(src_address=str(packet.src) , port_no=packet_in.in_port)
#add the record to the session object
session.add(entry)
#add the record to the session object
session.commit()
end = time.time()
elapsed = end - start

我已经计算了平均查询并将64个条目的时间插入到数据库中。

发现平均查询时间为.001424秒

发现平均插入时间为.03144秒

这意味着您每秒最多可以执行32次插入,或者每秒查询一次。

这些数字是否合理。我是数据库和sqlalchemy的新手。我的程序需要更多的插入和quries。而且每个表的条目数和表本身的数量将显着增加。这是最小数量的条目和一个表格的裸小型原型。

我的问题是这种性能曾经可以从数据库中获得。如果不是预期的性能?是否有任何已知的机制来加速这一过程。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

我建议阅读Why is SQLAlchemy insert with sqlite 25 times slower than using sqlite3 directly?的答案。它深入解释了与DBAPI,SQLAlchemy Core和SQLAlchemy ORM一起使用的INSERT的各种变体,包括用例和性能的差异。