最近のほとんどのソフトウェアアプリケーションには、アプリケーション自体で将来参照できるように、動的なデータストレージが含まれています。データがデータベースに保存されていることは誰もが知っています。データベースは、リレーショナルDBMSと非リレーショナルDBMSの2つのカテゴリに分類されます。
これら2つから選択するかどうかは、データ構造、関連するデータの量、データベースのパフォーマンスとスケーラビリティに完全に依存します。
リレーショナルDBMSは、構造化照会言語(SQL)を使用するようにデータを行単位でテーブルに格納するため、複数のトランザクションを含むアプリケーションに適しています。 MySQL、SQLite、PostgreSQLが含まれます。
一方、MongoDBなどのNoSQL DBMSはドキュメント指向であり、データはドキュメントの観点からコレクションに格納されます。これにより、大量のデータセットに対してより大きなストレージ容量が提供されるため、スケーラビリティがさらに向上します。
このブログでは、MongoDBまたはMySQLのいずれかについての知識が豊富であると想定しているため、クエリとデータベース構造の観点から2つの間の相関関係を知りたいと考えています。
以下は、MySQLからMongoDBへのクエリにさらに慣れるためのチートシートです。
MySQLからMongoDBへのチートシート-用語
MySQL用語 | MongoDB規約 | 説明 |
---|---|---|
これは、含まれているオブジェクトで類似する傾向があるデータのストレージコンテナです。 | ||
MySQLのテーブル内の単一オブジェクトエンティティと、MongoDBの場合のコレクションを定義します。 | ||
保存されているアイテムごとに、さまざまな値とデータ型で定義されたプロパティがあります。 MongoDBでは、同じコレクション内のドキュメントが互いに異なるフィールドを持つ場合があります。 MySQLでは、すべての行を既存の列と同じ列で定義する必要があります。 | ||
MongoDBの場合、保存されているすべてのオブジェクトは一意のフィールド値で識別されますが、MySQLでは、新しい行を作成するときに増分する独自の主キーを定義できます。 | ||
場所 | $ match | |
$ group | ||
ドロップ | $ unset | |
設定 | $ set |
スキーマステートメント
MySQLテーブルステートメント | MongoDBコレクションステートメント | 説明 |
---|---|---|
データベースとテーブルは、PHP管理パネルを介して明示的に作成されるか、スクリプト内で定義されます。つまり、 データベースの作成 テーブルの作成 | データベースは、暗黙的または明示的に作成できます。最初のドキュメント挿入時に暗黙的にデータベースとコレクションが作成され、このドキュメントに自動_idフィールドが追加されます。 このコメントをMongoShellで実行して、データベースを明示的に作成することもできます | MySQLでは、作成するテーブルの列を指定する必要があります。また、この例のように、特定の列に移動するデータのタイプと長さのようないくつかの検証ルールを設定する必要があります。 MongoDBの場合、各ドキュメントが保持する必要のあるフィールドも、指定されたフィールドが保持する必要のある検証ルールも定義する必要はありません。 ただし、MongoDBでは、データの整合性と一貫性のために、JSON SCHEMA VALIDATOR を使用して検証ルールを設定できます。 |
テーブルを落とす | | これは、MySQLのテーブルとMongoDBの場合のコレクションを削除するためのステートメントです。 |
join_dateという名前の新しい列を追加する すでに定義されている場合は、join_date列を削除します | join_dateという新しいフィールドを追加する これにより、コレクション内のすべてのドキュメントが更新され、参加日が現在の日付になります。 すでに定義されている場合は、join_dateフィールドを削除します これにより、すべてのコレクションドキュメントからjoin_dateフィールドが削除されます。 | 列/フィールドを追加または削除して、スキーマの構造を変更します。 MongoDBアーキテクチャはドキュメント構造に厳密に適用されないため、ドキュメントのフィールドが互いに異なる場合があります。 |
UserId列が昇順でAgeが降順のインデックスを作成する | UserIdフィールドとAgeフィールドを含むインデックスを作成します。 | インデックスは通常、クエリプロセスを容易にするために作成されます。 |
| | 新しいレコードを挿入します。 |
| | 25歳に等しいテーブル/コレクションからレコードを削除します。 |
| | テーブル/コレクションからすべてのレコードを削除します。 |
| | すべての列/フィールドを持つユーザーテーブル/コレクションからすべてのレコードを返します。 |
| | ユーザーテーブル/コレクションから、年齢、性別、主キーの列/フィールドを含むすべてのレコードを返します。 |
| | AgeおよびGender列/フィールドを持つusersテーブル/コレクションからすべてのレコードを返します。主キーは省略されています。 |
| | Gender値がMに設定されているusersテーブル/コレクションからすべてのレコードを返します。 |
| | 性別の値のみで、年齢の値が25に等しいusersテーブル/コレクションからすべてのレコードを返します。 |
| | Gender値がFに設定され、Ageが25であるusersテーブル/コレクションからすべてのレコードを返します。 |
| | Age値が25に等しくないusersテーブル/コレクションからすべてのレコードを返します。 |
| | Gender値がFまたはAgeが25に設定されているusersテーブル/コレクションからすべてのレコードを返します。 |
| | Age値が25より大きいusersテーブル/コレクションからすべてのレコードを返します。 |
| | Age値が25以下のusersテーブル/コレクションからすべてのレコードを返します。 |
| | Name値にHe文字が含まれているusersテーブル/コレクションからすべてのレコードを返します。 |
| | Gender値がFに設定されているusersテーブル/コレクションからすべてのレコードを返し、この結果をMySQLの場合はid列の昇順で、MongoDBの場合はtimeが挿入された順に並べ替えます。 |
| | Gender値がFに設定されているusersテーブル/コレクションからすべてのレコードを返し、この結果をMySQLの場合はid列、MongoDBの場合は挿入された時間の降順で並べ替えます。 |
| または | ユーザーテーブル/コレクション内のすべてのレコードをカウントします。 |
| または | Nameプロパティの値を持っているusersテーブル/コレクション内のすべてのレコードをカウントします。 |
| または | usersテーブル/コレクションの最初のレコードを返します。 |
| | 性別の値がたまたまFに等しいusersテーブル/コレクションの最初のレコードを返します。 |
| | 最初の5つのレコードをスキップした後、usersテーブル/コレクションの5つのレコードを返します。 |
| | これにより、ユーザーテーブル/コレクション内の25〜26歳を超えるすべてのレコードの年齢が設定されます。 |
| | これにより、usersテーブル/コレクション内のすべてのレコードの経過時間が1増加します。 |
| | これにより、ユーザーテーブル/コレクションの最初のレコードの年齢が1つ減ります。 |
MySQLやMongoDBを一元的に、単一のポイントから管理するには、https://severalnines.com/product/clustercontrolにアクセスしてください。