MongoDbで作業しましょう





現在、膨大な量のデータを扱う高負荷プロジェクトが増えています。 また、この情報を保存するための従来のリレーショナルモデルを使用することはできません。 NoSQLデータベースの人気が高まっています(NoSQLはSQLだけではありません)。 これらのデータベースの1つにMongoDBがあり、これは既にDisney、craiglist、foursquareなどの企業の注目を集めています。 さらに、彼らは彼女について繰り返し書いた:

MongoDB、NoRM、およびASP.NET MVCを使用したNoSQL

指でMongoDBをシャーディングする

指でのMongoDBレプリケーション



これは、.net環境でのMongoDbの操作に関する別の記事です。



必要なもの:

1.ダウンロード( http://www.mongodb.org/downloads )、解凍してmongod(これがサーバー)

2.ドライバー( https://github.com/mongodb/mongo-csharp-driver/downloads

3.行こう





データベースの作成。



デフォルトでは、データベースはc:/ data / dbフォルダーにあります



mongo.exeを実行して、新しいデータベースを作成します。

use mongoblog
      
      







アクセスパラメータ(ユーザー名とパスワード)をすぐに設定します。

 db.addUser("admin", "masterkey")
      
      







MongoDbの特徴は、ドキュメント指向のデータベースであり、構造に関する情報が含まれていないため、これで完了です。 すぐにデータモデルの説明に進みます。



記事とコメントの2つのエンティティがあり、記事には多くのコメントが含まれます。



 public partial class Article { [BsonId] public ObjectId Id { get; set; } //    - id   public string Url { get; set; } public string Title { get; set; } public string Teaser { get; set; } public string Content { get; set; } public DateTime AddedDate { get; set; } public List<string> Tags { get; set; } public bool IsPublished { get; set; } public string Bulk { get; set; } public List Comments { get; set; } public Article() { Id = ObjectId.GenerateNewId(); Tags = new List<string>(); Comments = new List(); } } public partial class Comment { [BsonId] public ObjectId Id { get; set; } //    - id   public DateTime AddedDate { get; set; } public string Content { get; set; } public Comment() { Id = ObjectId.GenerateNewId(); } }
      
      







次に、MongoDBの使用を検討します。





#1データベースへの接続。



デフォルトでは、データベースはサーバーのポート27017を占有します(通常どおりlocalhostがあります)。 データベースに接続します。

 public MongoDBContext(string ConnectionString, string User, string Password, string Database) { var mongoUrlBuilder = new MongoUrlBuilder(ConnectionString); server = MongoServer.Create(mongoUrlBuilder.ToMongoUrl()); MongoCredentials credentials = new MongoCredentials(User, Password); database = server.GetDatabase(Database, credentials); }
      
      







#2 /#3レコードの追加/変更



コレクションにオブジェクトを追加するには、名前でコレクションを取得する必要があります

 var collection = database.GetCollection<T>(table);
      
      





追加するには、次のコマンドを実行できます。

 collection.Insert<T>(obj);
      
      





または(変更について)

 collection.Save<T>(obj);
      
      







MongoDbは、独自のパラメーターである_idフィールドを個別に追加します。 Saveコマンドの実行時にオブジェクトの既存のIDが既にコレクションにある場合、このオブジェクトは更新されます。





#4インデックス作成



クイック検索のために、フィールドにインデックスを追加できます。 インデックスを作成するには、次のコマンドを使用します

 collection.EnsureIndex(IndexKeys.Descending("AddedDate"));
      
      







これにより、このフィールドによるソートが高速化されます。



#5取り外し



IDで削除するには、クエリ(クエリ)が作成されます。 この場合、それは

 var query = Query.EQ("_id", id)
      
      





コマンドが実行されます:

 collection.Remove(query);
      
      







#6出力記事



フィルターを適用して並べ替えて値を表示するには、ページングカーソルを使用します。

たとえば、降順(AddedDate desc)で10番目のページ(90項目をスキップし、次の10項目を表示)でソートされた削除されていないコレクション(IsDeleted = false)から選択するには、次のカーソルが描画されます。

 var cursor = collection.Find(Query.EQ("IsDeleted", false)); cursor.SetSortOrder(SortBy.Descending("AddedDate")); cursor.Skip = 90; cursor.Limit = 10; foreach (var obj in cursor) { yield return obj; }
      
      







#7コメントの追加。



MongoDbはドキュメント指向のデータベースであるため、コメント付きの個別のテーブルはなく、コメントは記事内のコメント配列に追加され、その後記事が保存されます。

 var article = db.GetByID<Article>("Articles", articleId); comment.AddedDate = DateTime.Now; article.Comments.Add(comment); db.Save<Article>("Articles", article);
      
      







#8コメントを削除します。



コメントも同様に削除されます。 記事オブジェクトを取得し、コメントのリストから現在のコメントを削除して、オブジェクトを保存します。



#9検索。



特定の部分文字列を含む要素を見つけるには、次のクエリを指定する必要があります。

 Query.Matches("Text", @".* .*").
      
      





検索では大文字と小文字が区別されるため、2つの問題があります。 Petya!= Petya、その他にも多くのフィールドがあります。

最初の問題は正規表現を使用して解決できます



しかし、両方の問題を一度に取り除くために、すべてのフィールドとコメントが小文字で書き込まれるバルクフィールドを作成し、このフィールドを探します。



#10バックアップベース。



これはバックアップであり、複製ではありません。 データベースファイルにアクセスするには、ロックを実行する必要があります(データベースは引き続き動作し、その時点でのみすべての書き込みコマンドがキャッシュされるため、後で実行されます)。 その後、データベースをコピーしてアーカイブし、ftpでレイアウトできます。 この手順の後、データベースをロック解除(ロック解除)する必要があります。

チーム:

 public void Lock() { var command = new CommandDocument(); command.Add("fsync", 1); command.Add("lock", 1); var collection = server.AdminDatabase.RunCommand(command); } public void Unlock() { var collection = server.AdminDatabase.GetCollection("$cmd.sys.unlock"); collection.FindOne(); }
      
      





問題が発生した場合は、次のコマンドを使用してデータベースサーバーを再起動する必要があります。

 mongod --repair
      
      







ソースコード





(asp.net mvc上の)トライアルアプリケーションは、次の場所にあります。

https://bitbucket.org/chernikov/mongodbblog



はい、そして他との関係でのパフォーマンスに関しては、ここにリンクがあります。



All Articles