ノンブロッキングORMの問題


9

私はSO について質問しましたが、私のお気に入りのWebフレームワークにはノンブロッキングORMがないことがわかりました。非ブロッキングとは、非同期検索のためのコールバックをサポートするORMを意味します。ORMには、データが受信されたときに実行されるコールバックなどが提供されます。

作成したいのですが、開発の開始を妨げるいくつかの質問があります。

  • ORMの開発時に発生する可能性のある問題は何ですか?
  • ノンブロッキング検索をサポートすると、ORMの複雑さが劇的に増加しますか?
  • なぜ非ブロッキングORMが非常に少ないのですか?

更新:質問を改善する必要があるようです。私たちはすでに非ブロッキングの方法でデータを受け取ることができるソリューションを持っています、そして私はそのようなソリューションを使用するほとんどの会社が生のSQLを使用すると信じています。今後のプロジェクトで再利用できる、より一般的なソリューションを作成したいと考えています。私たちはどんな困難に遭遇するでしょうか?

更新2:優先言語はpythonですが、私は原則に興味があります。この質問は実際に私のためです。私はすでにノンブロッキングORMを持っているプラ​​ットフォームを見ていきます。


2
「ノンブロッキングORM」とは何ですか?データを受け取る前にどのように表示できますか?
ロバートハーベイ

6
@RobertHarvey:非同期検索は実際にはかなりいいですね。ORMには、データが受信されたときに「アクティブ化」するためのコールバックなどが提供されます。そうでない場合は、UIの応答性を保証するために、ORMを別のスレッドに分割する必要があります。
Marjan Venema

@MarjanVenema、はい、コールバックサポート付きのORMが必要です。
Nikolay Fominyh

1
それなら、お気に入りの同期ORMで非同期コールバックを使用しないのはなぜですか? stackoverflow.com/q/1239035
Robert Harvey

@RobertHarvey、同期ORMが非同期サーバーをブロックするため。
Nikolay Fominyh

回答:


2

ORMの開発時に発生する可能性のある問題は何ですか?

Object Relational Impedance Mismatchを埋めるために必要な問題のリストを整理し、各RDBMSベンダーが提供するSQLの特異性に対処する必要があります。要件が高度になるほど、この部門のトラブルは悪化します。たとえば、結果ページングを実装するために生成するSQLは、Oracle、SQL Server、およびmysqlの間でかなり劇的に異なります。幸いなことに、これはブロッキングORM実装と非ブロッキングORM実装の間で違いはないので、Python用のオープンソースORMがあれば、そこから大いに借りてこれらすべての問題に対処することができます。

ノンブロッキング検索をサポートすると、ORMの複雑さが劇的に増加しますか?

直面する最大の問題は、RDBMS自体にアクセスするための接続ライブラリがブロックすることです。これは、対処しなければならないもう1つの違いです。ユーザーから見えないスレッドを管理することは、あなたにとってさらなる課題です。さらに、フレームワークのユーザーは操作を同期していると認識しているため、依存関係をオンデマンドでロードすることは困難です。結局のところ、通常、オブジェクトのコレクションプロパティにアクセスしてもよいという通知を期待していません。

なぜ非ブロッキングORMが非常に少ないのですか?

私はこの最後の点について推測することしかできませんが、それはそのようなフレームワークの需要が低いことと関係があると思います:必要に応じてアプリケーションコードに別のレベルのスレッドを追加することで非ブロッキングORMを部分的にシミュレートし、通常のブロッキングを維持できるため他の場所では親切であり、そのための特殊なフレームワークを開発するのは最適ではないようです。


この質問への回答の方が良いかどうかはわかりません。ありがとう。
Nikolay Fominyh

6

:あなたは、私がNode.jsのをお勧めするつもりですので、使用している、そしてそれのためのORMどの言語も言わなかったノードのORMは、ノード内のすべてが、これは違いはありません、非同期です。


質問を更新しました。
Nikolay Fominyh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.