1

リモートサーバーを実行しているデータベースにアクセスする 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 秒であることがわかりました

平均挿入時間は 0.03144 秒であることがわかりました

これは、1 秒あたり最大 32 回の挿入または 1 秒あたり 702 回のクエリを実行できることを意味します。

これらの数値は合理的に見えますか?私はデータベースと sqlalchemy に非常に慣れていません.私のプログラムでは、はるかに多くの挿入とクエリが必要です.また、テーブルごとのエントリ数とテーブル自体の数が大幅に増加します.これは最低限の値です.最小数のエントリと 1 つのテーブルを持つプロトタイプ。

私の質問は、これがデータベースに一度期待できるパフォーマンスの種類です.?そうでない場合、期待されるパフォーマンスは何ですか? プロセスを高速化する既知のメカニズムはありますか? どんな助けでも大歓迎です。

4

1 に答える 1

1

なぜ SQLAlchemy insert with sqlite は sqlite3 を直接使用するよりも 25 倍遅いのですか?に対する私の回答を読むことをお勧めします。. DBAPI、SQLAlchemy Core、および SQLAlchemy ORM で使用するさまざまな INSERT について、ユース ケースとパフォーマンスの違いを含めて詳細に説明します。

于 2013-05-12T00:33:37.707 に答える