トラフィックの多いリアルタイムアプリケーションは、エンタープライズ環境で広く使用されています。 リアルタイムアプリケーションでは、情報は生成された瞬間に利用可能になり、それが遅れると深刻な経済的損失を引き起こす可能性があります。 これらのトラフィックの多いリアルタイムアプリケーションが直面する主な課題は、データセットの変更について通知を受け取り、対応するビューを更新できるようにすることです。
ただし、これらのトラフィックの多いリアルタイムアプリケーションは、常駐データに対するクエリのみをサポートし、更新されたデータセットを取得するには、瞬時ではない特定の間隔の後にクエリを再度実行する必要があるため、従来のデータベースに依存できません。 また、この定期的なポーリングは、データセットに変更がない場合でも、ほとんどの場合、コストのかかるデータベーストリップを行うため、パフォーマンスとスケーラビリティの問題を引き起こします。
Sql依存性 はMicrosoftによってSQLServerで提供されており、Windows上のOracleもそれをサポートしています。 SqlDependencyを使用すると、SQLステートメントを指定できます。SQLServerは、データベース内のこのデータセットを監視して、追加、更新、または削除がないかどうかを確認し、これが発生したときに通知します。 ただし、SqlDependencyの問題は、一度起動されると、データベースから登録解除されることです。 したがって、データセットの今後の変更はすべて失われ、通知は届きません。
さらに、SqlDependencyは、変更が発生したレコードの詳細を提供しません。 したがって、データセットの変更を見つけるには、データセットに追加、更新、または削除された特定のレコードのみを直接フェッチするのではなく、完全なデータセットを再度フェッチする必要があります。 そしてもちろん、これは効率的ではありません。
SqlDependencyの制限に加えて、データベースは、毎秒数万のクエリが実行され、データベースがすぐにスケーラビリティのボトルネックになる、これらのトラフィックの多いリアルタイムアプリケーションのトランザクション要求に対処できません。 これは、アプリケーションサーバーを追加することでアプリケーション層を線形に拡張できますが、データベースサーバーでは同じことができないためです。
これはどこです 分散キャッシュ ような NCache データをキャッシュし、スケーラビリティのボトルネックを引き起こしている高価なデータベーストリップを減らすことができるためです。
NCache SQLのようなクエリをキャッシュクラスタに登録できる強力な連続クエリ機能があります。 この連続クエリはキャッシュクラスタでアクティブなままであり、このクエリのデータセットに変更がある場合は、 NCache リアルタイムアプリケーションに通知します。 この継続的なクエリのアプローチにより、データベースに対して同じ高価なクエリを定期的に実行してポーリングする必要がなくなります。
これがのサンプルコードです NCache 連続クエリ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public void Main(string[] args) { … NCache.InitializeCache("myPartitionReplicaCache"); String query = "SELECT NCacheQuerySample.Business.Product WHERE this.ProductID > 100"; Hashtable values = new Hashtable(); values.Add("ProductID", 100); … onItemAdded = new ContinuousQueryItemAddedCallback(OnQueryItemAdded); onItemUpdated = new ContinuousQueryItemUpdatedCallback(OnQueryItemUpdated); onItemRemoved = new ContinuousQueryItemRemovedCallback(OnQueryItemRemoved); ContinuousQuery query = new ContinuousQuery(queryString, values); query.RegisterAddNotification(onItemAdded); query.RegisterUpdateNotification(onItemUpdated); query.RegisterRemoveNotification(onItemRemoved); _cache.RegisterCQ(query); … } //data set item is removed void OnQueryItemRemoved(string key){ … Console.WriteLine("Removed key: {0}", key); … } //data set item is updated void OnQueryItemUpdated(string key){ … Console.WriteLine("Updated key: {0}", key); … } //data set item is removed void OnQueryItemAdded(string key){ … Console.WriteLine("Added key: {0}", key); … } |
そして、SqlDependencyとは異なり、 NCache 継続クエリはアクティブなままであり、変更通知ごとに登録が解除されることはありません。 そのため、トラフィックの多いリアルタイムアプリケーションは、複数の変更にわたって通知され続けます。
NCache 連続クエリは、ADD、UPDATE、およびDELETEで個別に通知される柔軟性も提供します。 また、継続クエリを作成した後でも、実行時にこれらのイベントを指定できます。これは、SqlDependencyでは許可されていません。 これにより、キャッシュクラスターからリアルタイムアプリケーションへのイベントトラフィックも削減されます。
要約すれば、 NCache 非常に強力な イベント駆動型連続クエリ 他のデータベースにはありません。 と、 NCache また、トラフィックの多いリアルタイムアプリケーションに対して線形にスケーラブルです。
だから、完全に機能する60日間の試用版をダウンロードしてください NCache Enterprise 自分で試してみてください。