0

ASP.Net、MVC、Entity Framework は初めてです。

小規模なデータベースのベスト プラクティスを理解したいです。たとえば、コントソ大学では、数百または数千の学生とコースしかないことがわかっているとします。したがって、すべてのデータがメモリに快適に収まります。では、インメモリ コレクションを使用して、潜在的に高レイテンシのデータベース操作を回避する方がよいのでしょうか?

Windows Azure に展開された小規模な運用 Web サイトを考えています。

より具体的に言うと、私が考えている特定のシナリオには、読み取り専用のレコードが数千ありますが、ユーザーは独自のアイテムを作成することもできます。数千の人気タイトルのリストからオフラインで集められた映画、アルバム、または歌詞のコレクションを考えてみてください。ユーザーはコレクションを参照でき (読み取り専用)、ほとんどの場合、探しているものがそこで見つかります。ただし、ユーザーは自分のレコードを追加することもできます。

人気のあるタイトルはメモリに収まり、これらは読み取り専用なので、人気のあるタイトルにはデータベースを使用しない方がよいでしょうか? このシナリオのデータとコードをどのように整理しますか?

ご意見やご指摘をありがとうございます。

4

2 に答える 2

1

You should definitely store your data in some persistent storage medium (SQL, Azure Tables, XML file, etc). The issues with storing items in memory are:

  1. You have to find a way to store them once for the application and not once per user. Else, you will have potentially several copies of a 2-5 MB dataset floating around your memory space.

  2. Users can add records, are these for everyone to see or just them. How would you handle user specific data.

  3. If your app pool recycles, server gets moved by the Azure engineers, etc, you have to repopulate that data.

  4. As said above, caching can really help to alleviate any SQL Azure latency (which btw, is not that high, we use SQL Azure and web roles and have not had any issues).

  5. Complex queries. Sure, you can use LINQ to process in memory lists, but SQL is literally built to perform relational queries in a fast, efficient, data-safe manner.

  6. Thread safe operations on an in-memory collection could be troublesome.

Edit/Addendum

The key, we have found, to working with SQL Azure is to not issue tons of little tiny queries, but rather, get the data you need in as few queries as possible. This is something all web applications should do, but it becomes much more apparent when using SQL Azure rather than a locally hosted database. Lastly, as far as performance/caching/etc, don't prematurely optimize! Get your application working, then identify bottlenecks. More often than not, it will be a code solution to fix the bottleneck and not necessarily a hardware/infrastructure issue.

于 2013-11-12T16:35:34.103 に答える