2017-08-30 5 views
2

私はvoltdbで作業しようとしています。python driver 私はvoltdbで手続きを作成し、VoltProcedureで呼び出すことができます。スムースのような:voltdbのpythonドライバ(voltdb-client-python)で未処理のSQLを実行する方法はありますか?

volt_procedure = VoltProcedure(volt, "Proc_name", [VoltConnection.VOLTTYPE_STRING]) 

result = volt_procedure.call(some_argument) 

私はどういうわけかこのドライバで生のSQLを実行できますか?

答えて

3

はい、実行するSQL文であるStringパラメータを取るシステムプロシージャ "@AdHoc"を呼び出すことができます。

@AdHocを呼び出すときは、解析して計画するか、キャッシュに既存のプランがあるため、追加のオーバーヘッドが発生します。その後、コンパイル済みのストアドプロシージャとまったく同じように実行されます。クラスタ内の各サーバーには、解析と計画のためのスレッドプールがあります。したがって、@AdHoc呼び出しを処理する容量は拡張されますが、単純なSQL文では一般にトランザクションを実行するクラスタの容量よりも一般的に小さくなります。より複雑なSQLの場合、通常はトランザクションの実行に時間がかかります。したがって、実行時間に応じて、解析の処理速度が向上する可能性があります。

挿入には、組み込みの「デフォルト」プロシージャを使用します。 TABLE_NAME.insert。毎秒何千回も実行するなど、頻繁に実行する必要のあるものについては、プロシージャを使用してみてください。プロシージャーは、JavaクラスまたはDDL専用の「CREATE PROCEDURE ... AS」構文を使用して定義できます。可能であれば、手順を分割してください。しかし、特に動的に生成されたSQL文の場合、@AdHoc呼び出しを使用するのを恐れないでください。

+0

ありがとうございました。 –

+0

もう1つの質問があります:@AdHocで手続きや生のSQLを使用する方がよいでしょうか?単純なクエリと複雑なクエリのどちらの方がパフォーマンスが良いでしょうか? –

+0

私はこれに対処するための答えを更新しました。質問ありがとう! – BenjaminBallard

関連する問題