Docs Menu
Docs Home
/ /

チュートリアル: スキームデータを使用して、レプリカセットにシャーディングを実装する

このチュートリアルでは、MongoDB Atlasでクラスターを設定し、Spring Data MongoDBを使用してシャーディングされた usersコレクションを操作するアプリケーションをビルドする方法について説明します。

シャーディングでは、複数のマシンにデータセットが分散されます。これは、大規模なデータセットまたは高い読み取りおよび書き込みスループットを持つアプリケーションに便利です。MongoDBは、垂直拡大水平拡大の 2 つの拡大アプローチをサポートしています。

垂直スケーリング では、CPU、 RAM、またはストレージをアップグレードすることで、単一サーバーのキャパシティーを増やします。このアプローチには、ハードウェア機能に基づく制限があり、コストが高くなる可能性があります。

水平スケーリング では、データセットとワークロードが複数のサーバーに分割されます。各サーバーは全体的なワークロードのサブセットを処理するため、単一の強力なサーバーよりも効率が向上します。MongoDB Atlas は、シャーディングされたクラスターのマネジメントを簡素化します。

シャーディングの詳細については、 MongoDB Serverマニュアルの「シャーディング」を参照してください。

このチュートリアルでは、次のアクションを実行する方法について説明します。

  • 前提条件を確認します

  • MongoDB Atlasでシャーディングされたクラスターをセットアップする

  • コレクションのシャーディングを構成する

  • アプリケーションを実装する

  • アプリケーションを構成する

1
2

シャーディングされたクラスターを作成するには、次のアクションを実行します。

  1. M30 以上のクラスターのクラスター設定で、Additional Settings に移動します。

  2. Sharding を選択し、有効に切り替えます。

  3. 配置するシャードの数を設定します。本番アプリケーションの場合は、複数のシャードを使用します。1 と 70 のシャードを配置できます。詳細については、Atlas ドキュメントのシャードクラスタの配置を参照してください。

  4. シャーディングされたクラスターが作成されたら、Load Sample Dataset を選択してサンプルデータを読み込みます。

3

spring Data MongoDB はコレクションのシャーディングを自動的に構成しません。これらの操作は mongosh を使用して手動で実行する必要があります。

クラスターに接続し、シャーディングを構成するには、ターミナルで次のコマンドを実行します。

mongosh "mongodb+srv://<username>:<password>@<cluster-url>/admin"

<username><password><cluster-url> のプレースホルダーをMongoDB Atlas の認証情報と接続文字列で置き換えます。

emailフィールドで usersコレクションをシャードするには、次のコマンドを実行します。

sh.shardCollection("sample_mflix.users", { email: 1 })

シャーディングが有効になっており、コレクションがシャーディングされていることを確認するには、次のコマンドを実行します。

sh.status()
4

正確なデータアプリケーションを実装するには、エンティティ、リポジトリ、サービス、および コントローラー レイヤーを定義する必要があります。

  1. シャーディングを使用してエンティティクラスを定義するには、@Sharded アノテーションを使用してシャードキーフィールドを指定します。次のコードは、emailフィールドをシャードキーとして持つ User エンティティの例を示しています。

    import org.springframework.data.annotation.Id;
    import org.springframework.data.mongodb.core.mapping.Document;
    import org.springframework.data.mongodb.core.mapping.Field;
    import org.springframework.data.mongodb.core.mapping.Sharded;
    @Document("users")
    @Sharded(shardKey = { "email" })
    public class User {
    @Id
    private String id;
    private String name;
    @Field("email")
    private String email;
    private String password;
    // Getters and Setters
    }

    @Sharded アノテーションは、シャーディングされた環境でのMongoDB操作を最適化するのに役立ちます。これにより、アップサート中に replaceOne クエリにシャードキーが含まれるようになります。

  2. User エンティティのリポジトリを作成するには、MongoRepository を拡張するインターフェースを定義します。次のコードは、UserRepository インターフェースの例を示しています。

    import org.springframework.data.mongodb.repository.MongoRepository;
    import com.mongodb.sharded.model.User;
    public interface UserRepository extends MongoRepository<User, String> {
    }
  3. ビジネス ロジックを処理するには、リポジトリと対話するサービスクラスを作成します。次のコードは、UserServiceクラス の例を示しています。

    import java.util.List;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import com.mongodb.sharded.model.User;
    import com.mongodb.sharded.repository.UserRepository;
    @Service
    public class UserService {
    @Autowired
    private UserRepository userRepository;
    public List<User> getAllUsers() {
    return userRepository.findAll();
    }
    public User saveUser(User user) {
    return userRepository.save(user);
    }
    }
  4. User エンティティの REST エンドポイントとなる接続されたデバイスを公開するには、 コントローラークラスを作成します。次のコードは、UserControllerクラス の例を示しています。

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import java.util.List;
    @RestController
    @RequestMapping("/users")
    public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping
    public List<User> getAllUsers() {
    return userService.getAllUsers();
    }
    @PostMapping
    public User createUser(@RequestBody User user) {
    return userService.saveUser(user);
    }
    }
5

アプリケーションをMongoDB Atlasに接続するには、 MongoDB接続 URI を application.properties または application.ymlファイルに追加します。次のコードは、構成例を示しています。

spring.data.mongodb.uri=mongodb+srv://<username>:<password>@<cluster-url>/myDatabase?retryWrites=true&w=majority

<username><password><cluster-url> のプレースホルダーをMongoDB Atlas の認証情報と接続文字列で置き換えます。

シャードキーを選択した場合は、シャード全体にデータが均等に分散されていることを確認してください。シャードキーの選択は、シャーディングされたクラスターのパフォーマンスとスケーラビリティに重要です。シャードキーの選択の詳細については、 MongoDB Serverマニュアルのシャードキーの選択を参照してください。

理想的なシャードキーには、次の特性があります。

  • 高濃度: キーには多数の一意の値があり、シャード全体にデータを均等に分散できます。キーは完全に一意である必要はありません。

  • 均等分散: キーは、1 つのシャードが他のシャードよりも多くのデータやリクエストを取り扱うホットポイントを回避するために、ドキュメントをすべてのシャードに均等に分散します。

  • 一般的なクエリのサポート: 最も一般的なクエリ パターンに一致するキーを選択して、クエリの分散を減らし、パフォーマンスを向上させます。

sample_mflixデータベース内の usersコレクションでは、次の場合、emailフィールドはシャードキーとして機能します。

  • メールは一意であり、適切に分散されます。

  • クエリは、メールで頻繁にフィルタリングまたはソートします。

MongoDBでのシャーディングの詳細については、 MongoDB Serverマニュアルの「 シャーディング 」を参照してください。

戻る

スリングMongoDBを使い始める

項目一覧