sql >> データベース >  >> NoSQL >> MongoDB

MySQLからMongoDBへ-管理に関するチートシート

    最近のほとんどのソフトウェアアプリケーションには、アプリケーション自体で将来参照できるように、動的なデータストレージが含まれています。データがデータベースに保存されていることは誰もが知っています。データベースは、リレーショナル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
    SomeninesがMongoDBDBAになる-MongoDBを本番環境に導入MongoDBDownloadを無料でデプロイ、監視、管理、スケーリングするために知っておくべきことを学びましょう

    スキーマステートメント

    MySQLテーブルステートメント MongoDBコレクションステートメント 説明

    データベースとテーブルは、PHP管理パネルを介して明示的に作成されるか、スクリプト内で定義されます。つまり、

    データベースの作成

    CREATE DATABASE database_name

    テーブルの作成

    CREATE TABLE users (
        id MEDIUMINT NOT NULL
            AUTO_INCREMENT,
        UserId Varchar(30),
        Age Number,
        Gender char(1),
        Name VarChar(222),
        PRIMARY KEY (id)
    )

    データベースは、暗黙的または明示的に作成できます。最初のドキュメント挿入時に暗黙的にデータベースとコレクションが作成され、このドキュメントに自動_idフィールドが追加されます。

    db.users.insert( {
        UserId: "user1",
        Age: 55,
        Name: "Berry Hellington",
        Gender: "F",
     } )

    このコメントをMongoShellで実行して、データベースを明示的に作成することもできます

    db.createCollection("users")

    MySQLでは、作成するテーブルの列を指定する必要があります。また、この例のように、特定の列に移動するデータのタイプと長さのようないくつかの検証ルールを設定する必要があります。 MongoDBの場合、各ドキュメントが保持する必要のあるフィールドも、指定されたフィールドが保持する必要のある検証ルールも定義する必要はありません。

    ただし、MongoDBでは、データの整合性と一貫性のために、JSON SCHEMA VALIDATOR

    を使用して検証ルールを設定できます。

    テーブルを落とす

    DROP TABLE users
    db.users.drop()

    これは、MySQLのテーブルとMongoDBの場合のコレクションを削除するためのステートメントです。

    join_dateという名前の新しい列を追加する

    ALTER TABLE users ADD join_date DATETIME

    すでに定義されている場合は、join_date列を削除します

    ALTER TABLE users DROP COLUMN join_date DATETIME

    join_dateという新しいフィールドを追加する

    db.users.updateMany({},{$set:{‘join_date’: new Date()})

    これにより、コレクション内のすべてのドキュメントが更新され、参加日が現在の日付になります。

    すでに定義されている場合は、join_dateフィールドを削除します

    db.users.updateMany({},{$unset:{‘join_date’: “”})

    これにより、すべてのコレクションドキュメントからjoin_dateフィールドが削除されます。

    列/フィールドを追加または削除して、スキーマの構造を変更します。

    MongoDBアーキテクチャはドキュメント構造に厳密に適用されないため、ドキュメントのフィールドが互いに異なる場合があります。

    UserId列が昇順でAgeが降順のインデックスを作成する

    CREATE INDEX idx_UserId_asc_Age_desc
    ON users(UserId)

    UserIdフィールドとAgeフィールドを含むインデックスを作成します。

    db.users.ensureIndex( { UserId: 1, Age: -1 } )

    インデックスは通常、クエリプロセスを容易にするために作成されます。

    INSERT INTO users(UserId,
                      Age,
                      Gender)
    VALUES ("user1",
            25,
            "M")
    db.users.insert( {
           UserId: "bcd001",
           Age: 25,
           Gender: "M",
         Name: "Berry Hellington",
    } )

    新しいレコードを挿入します。

    DELETE FROM users
    WHERE Age = 25
    db.users.deleteMany( { Age = 25 } )

    25歳に等しいテーブル/コレクションからレコードを削除します。

    DELETE FROM users
    db.users.deleteMany({})

    テーブル/コレクションからすべてのレコードを削除します。

    SELECT * FROM users
    db.users.find()

    すべての列/フィールドを持つユーザーテーブル/コレクションからすべてのレコードを返します。

    SELECT id, Age, Gender FROM users
    db.users.find(
       { },
       { Age: 1, Gender: 1 }
    )

    ユーザーテーブル/コレクションから、年齢、性別、主キーの列/フィールドを含むすべてのレコードを返します。

    SELECT  Age, Gender FROM users
    db.users.find(
       { },
     { Age: 1, Gender: 1,_id: 0}
    )

    AgeおよびGender列/フィールドを持つusersテーブル/コレクションからすべてのレコードを返します。主キーは省略されています。

    SELECT * FROM users WHERE Gender = “M”
    db.users.find({ Gender: "M"})

    Gender値がMに設定されているusersテーブル/コレクションからすべてのレコードを返します。

    SELECT Gender FROM users WHERE Age = 25
    db.users.find({ Age: 25}, { _id: 0, Gender: 1})

    性別の値のみで、年齢の値が25に等しいusersテーブル/コレクションからすべてのレコードを返します。

    SELECT * FROM users WHERE Age = 25 AND Gender = ‘F’
    db.users.find({ Age: 25, Gender: "F"})

    Gender値がFに設定され、Ageが25であるusersテーブル/コレクションからすべてのレコードを返します。

    SELECT * FROM users WHERE  Age != 25
    db.users.find({ Age:{$ne: 25}})

    Age値が25に等しくないusersテーブル/コレクションからすべてのレコードを返します。

    SELECT * FROM users WHERE Age = 25 OR Gender = ‘F’
    db.users.find({$or:[{Age: 25, Gender: "F"}]})

    Gender値がFまたはAgeが25に設定されているusersテーブル/コレクションからすべてのレコードを返します。

    SELECT * FROM users WHERE Age > 25
    db.users.find({ Age:{$gt: 25}})

    Age値が25より大きいusersテーブル/コレクションからすべてのレコードを返します。

    SELECT * FROM users WHERE Age <= 25
    db.users.find({ Age:{$lte: 25}})

    Age値が25以下のusersテーブル/コレクションからすべてのレコードを返します。

    SELECT Name FROM users WHERE Name like "He%"
    db.users.find(
      { Name: /He/ }
    )

    Name値にHe文字が含まれているusersテーブル/コレクションからすべてのレコードを返します。

    SELECT * FROM users WHERE Gender = ‘F’ ORDER BY id ASC
    db.users.find( { Gender: "F" } ).sort( { $natural: 1 } )

    Gender値がFに設定されているusersテーブル/コレクションからすべてのレコードを返し、この結果をMySQLの場合はid列の昇順で、MongoDBの場合はtimeが挿入された順に並べ替えます。

    SELECT * FROM users WHERE Gender = ‘F’ ORDER BY id DESC
    db.users.find( { Gender: "F" } ).sort( { $natural: -1 } )

    Gender値がFに設定されているusersテーブル/コレクションからすべてのレコードを返し、この結果をMySQLの場合はid列、MongoDBの場合は挿入された時間の降順で並べ替えます。

    SELECT COUNT(*) FROM users
    db.users.count()

    または

    db.users.find().count()

    ユーザーテーブル/コレクション内のすべてのレコードをカウントします。

    SELECT COUNT(Name) FROM users
    db.users.count({Name:{ $exists: true }})

    または

    db.users.find({Name:{ $exists: true }}).count()

    Nameプロパティの値を持っているusersテーブル/コレクション内のすべてのレコードをカウントします。

    SELECT * FROM users LIMIT 1
    db.users.findOne()

    または

    db.users.find().limit(1)

    usersテーブル/コレクションの最初のレコードを返します。

    SELECT * FROM users WHERE Gender = ‘F’ LIMIT 1
    db.users.find( { Gender: "F" } ).limit(1)

    性別の値がたまたまFに等しいusersテーブル/コレクションの最初のレコードを返します。

    SELECT * FROM users LIMIT 5 SKIP 10
    db.users.find().limit(5).skip(10)

    最初の5つのレコードをスキップした後、usersテーブル/コレクションの5つのレコードを返します。

    UPDATE users SET Age = 26 WHERE age > 25
    db.users.updateMany(
      { age: { $gt: 25 } },
      { $set: { Age: 26 } }
    )

    これにより、ユーザーテーブル/コレクション内の25〜26歳を超えるすべてのレコードの年齢が設定されます。

    UPDATE users SET age = age + 1
    db.users.updateMany(
      {} ,
      { $inc: { age: 1 } }
    )

    これにより、usersテーブル/コレクション内のすべてのレコードの経過時間が1増加します。

    UPDATE users SET age = age - 1
    WHERE id = 1
    db.users.updateMany(
      {} ,
      { $inc: { age: -1 } }
    )

    これにより、ユーザーテーブル/コレクションの最初のレコードの年齢が1つ減ります。

    MySQLやMongoDBを一元的に、単一のポイントから管理するには、https://severalnines.com/product/clustercontrolにアクセスしてください。


    1. CDPのHBaseがAmazonのS3をどのように活用できるか

    2. StackExchange.Redisのキーパターンで値を取得します

    3. MongoDB挿入パフォーマンスを改善する方法

    4. マングースの制限/オフセットおよびカウントクエリ