pythonとmysqlストレージプロセスのいくつかのこと

2381 ワード

最近、製品の効率を高めるために、MySQLのストレージプロセスの水を歩かざるを得ない.水は深くないとしか言いようがなく、効果も素晴らしい.忘れないように、ここで記録をします.
         1. Pythonがストレージ・プロシージャを呼び出す方法
SqlAlchemyのセッションは直接呼び出すことができます.セッション自体がデータベースの返信をカプセル化しているため、下位層も呼び出しに依存するデータベースの親切な方法である.ストレージ・プロシージャをexecuteで直接呼び出すことができます
session.execute("call procedure_name(param1, param2, ..., param_return);")

でも!この呼び出し方式には穴がある.私の実際の検証を通じて、現象は記憶過程が複雑で、メモリを消費する時、このような呼び出し方式はメモリの占有量が高くなりやすい~時間がきついため、具体的な原因はまだはっきりしていない.
データベースエンジンメソッドを直接使用して呼び出すことを推奨する.
 args = (param1, param2, ..., param_return)
 res = cursor.callproc('procedure_name', args)
 # res  args      , 
 #                OUT   ,          ,        

        2. MySQLのXMLメソッド
MySQL解析xmlは、ExtractValue(xml,xpath)とUpdateXML(xml,xpath,new_xml)の2つの方法しかありません.xmlを取得する属性は主にExtractValueメソッドに依存する.ただし、このメソッドではxmlの属性値しか取得できません.つまり、xmlの一部のセグメントを取得するには、substring_のようなMySqlの文字列メソッドに依存するしかありません.index()や、文字列のつづり方concat()など.
私たちのよくあるシーンは、xmlにキーがあるかどうかを判断するなど、ExtractValueもサポートされておらず、空の文字列に戻るのは頭がつかめません.キーが存在するか否かを判断する方法としては、正規マッチングREGEXPを用いることがある
select @xml REGEXP 'key_name'; 

文字列メソッドInstr(str,sub_str)
select instr(@xml, 'key_name');

文字列メソッドlocate(str,sub+str)
select locate(@xml, 'key_name');

以上の3つの方法はいずれも可能である、1 M程度の大きさのxmlの場合、REGEXPのマッチング時間は60 ms程度、InStrの時間は10 ms以上、locateの場合は1ビットミリ秒数に安定する.locateメソッドを推奨する.
UpdateXMLは、xmlフラグメントを置き換えるために使用されます.たとえば......一部の役に立たないクリップは、空の文字列に直接置き換えることができます~
また、いくつかの穴は避けなければなりません.
         <1>.xmlが非常に大きいと解析速度が遅くなる.解決策は早めに取り外すこと~
         <2>.xmlが非常に大きい場合は、文字やラベルをreplaceでグローバルに置き換えようとしないでください.例えばxmlのnamespaceとか、窒息するほど遅い!解決策は、ETで事前に置き換えておくと・・・
MySQL xml functionドキュメントを添付https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html
MySQL string functionドキュメントを添付https://dev.mysql.com/doc/refman/5.7/en/string-functions.html   
         3. MySQLのJSONメソッド
MySQLのJsonへのサポートはXMLより1万倍も優れています!
MySQL json functionドキュメントを添付https://dev.mysql.com/doc/refman/5.7/en/json-functions.html
これらの方法により、リストや辞書を記憶中に使用することができる~ほとんどのアプリケーションにとって楽しいことである.
         
最後に!どうしてこんなに面倒なの?ストレージ・プロシージャを使用することで、データベースのインタラクション回数を大幅に減らすことができ、SQLの効率自体はすべてのORMよりも強く、ストレージ・プロシージャはSQLをコンパイルしたものである.あなたの品物、あなたの細部!まとめて、合格したプログラマーはやはりSQLを書く必要があります.