ホームページ データベース mysql チュートリアル mongodb sharding原理学习与试用(六)之chunk手动切割

mongodb sharding原理学习与试用(六)之chunk手动切割

Jun 07, 2016 pm 05:56 PM
mongodb sharding 原理 勉強 試してみる

1. 手动切割chunk主要是两个函数splitAt(fullname,middle)与splitFind(fullname,find). fullname指定哪个库的哪个集合。middle与find都是条件,代表你想手动切割哪个chunk. 需要注意的是条件必须包含片键,不然报错,如下图。 这两个函数不同的是: 1.1 spli

1. 手动切割chunk主要是两个函数splitAt(fullname,middle)与splitFind(fullname,find). fullname指定哪个库的哪个集合。middle与find都是条件,代表你想手动切割哪个chunk. 需要注意的是条件必须包含片键,不然报错,如下图。

  

这两个函数不同的是:

 1.1 splitAt利用middle这个条件找到对应的chunk,并以这个条件所查询到的第一条结果为分隔点,把原先的chunk分隔成两部分。

  (一)在手动切隔之前,sar总共有三个块。如下图

  

  (二)执行切割命令

  

  之后chunks的分布如下图

  

  可以看出,执行之后,将第二个chunk,香港虚拟主机,按照{_id:ObjectId("50dc0790525e4314024b79d0")}这个值为分隔点分隔成第2,3两块。

 1.2 函数splitFind,官网解释是将找到的第一个chunk分隔成size大小相等的两个chunk.但是我在测试过程中发现并不是这么回事。版本是2.2.2

  (一)准备数据。向一个新集合插入250W条有规律的数据。如下图。字段name的值末尾是一个自增的数字。

  

  (二)数据插入之后,集合的分块情况如下图。

  

  (三)我们可以看下,第一块最后一条数据是什么。

  

  (四)可以看到,第一块最后一条数据的name值是"habc780335".也就是说第一块有78W条数据之多。现在将第一块分成两块。使用splitFind()函数。

  

  (五)name值为"habc19"肯定是在第一块中。因为按官网所说,应该将第一块分成size大小相等的两块。可实际上呢?

  

  (六)如上图,的确是将原先的第一块分成了两块。第二块最后一条的ID值就是原先第一块最后一条的ID值。但第1,2这两块size大小是相等的吗?如下图。

  

  (七)如上图。第一块的最后一条数据实际上就是第一条数据。这说明第一块实际上只有一条数据。很显然这两块的size是不相等的。真实情况究竟是什么呢 ???

2. 今天在将一个已被移除的shard重新添加进来的时候,出现了问题。特记录下来。

  问题:将一个shard移除后,我没有停掉这个shard。后来为了测试我又把它添加进来。db.runCommand({addshard:"hostname:port"}); 操作提示成功。也开始了迁移数据。等迁移完成之后,我进行查询操作,发现操作失败。错误提示是“gotshardname different than what i had before” 。如下图

  错误提示是说,这个shard之前添加进来的时候name被赋值为shard0001,现在再次添加进来后name被赋值为shard0000.当进行查询操作时发现这前后name不一样。所以报错。我比较困惑的是,它是怎么知道这个shard之前的name值的。我找遍config库下面的所有collection.都没有发现有地方存储shard之前的name值。仅仅只有shards这个集合存储相关数据。但是存储的都是此时此刻各个shard的情况。问了渡娘与google.没有什么收获。后来没办法,我想把这个shard再一次的remove掉后再添加进来。可以不行。

  

  虽然操作提示是成功的,但是过了很久我发现数据根本就没有迁移。查询日志,发现了错误提示。

  

  错误提示仍是name值前后不一样。后来在同事的提示下,我将这个shard重启,重启后发现问题解决了。

  分析:每个添加进去的shard的name值不仅在config库存储,同时各个shard也都存储着这个值。不同的是,config库的数据是落地的,但各个shard是缓存起来的。被移除的shard如果不重启,那么这个name值就一直存在。有一点我不理解的是,既然name值存在,并且再次添加后name不一样却能添加成功,并且数据也都迁移过来了,香港虚拟主机,只是查询操作的时候才报错。难道迁移数据与查询数据使用的是不同地方的name值? 有一点需要注意的是,虽然查询操作失败,但写操作能够成功。

  如何避免:db.runCommand({addshard:"hostname:port",name:"xxx"}) VS db,runCommand({addshard:"hostname:port"})。 在addshard的时候,我没有指定name值,系统就使用默认值从shard0000开始递增。因此,在addshard时一定要手动指定name值。

 

 

 

 

  

  

  

,服务器空间
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DebianでMongoDB自動拡張を構成する方法 DebianでMongoDB自動拡張を構成する方法 Apr 02, 2025 am 07:36 AM

この記事では、自動拡張を実現するためにDebianシステムでMongodbを構成する方法を紹介します。主な手順には、Mongodbレプリカセットとディスクスペース監視のセットアップが含まれます。 1。MongoDBのインストール最初に、MongoDBがDebianシステムにインストールされていることを確認してください。次のコマンドを使用してインストールします。sudoaptupdatesudoaptinstinstall-yymongodb-org2。mongodbレプリカセットMongodbレプリカセットの構成により、自動容量拡張を達成するための基礎となる高可用性とデータ冗長性が保証されます。 Mongodbサービスを開始:Sudosystemctlstartmongodsudosys

作曲家を使用して、推奨システムのジレンマを解決する:Andres-Montanez/推奨 作曲家を使用して、推奨システムのジレンマを解決する:Andres-Montanez/推奨 Apr 18, 2025 am 11:48 AM

eコマースのWebサイトを開発するとき、私は困難な問題に遭遇しました。ユーザーにパーソナライズされた製品の推奨事項を提供する方法です。当初、私はいくつかの簡単な推奨アルゴリズムを試しましたが、結果は理想的ではなく、ユーザーの満足度も影響を受けました。推奨システムの精度と効率を改善するために、より専門的なソリューションを採用することにしました。最後に、Andres-Montanez/Adcumentations Bundleを介してAndres-Montanez/Bundleをインストールしました。これは、問題を解決しただけでなく、推奨システムのパフォーマンスを大幅に改善しました。次の住所から作曲家を学ぶことができます。

DebianでMongodbの高可用性を確保する方法 DebianでMongodbの高可用性を確保する方法 Apr 02, 2025 am 07:21 AM

この記事では、Debianシステムで非常に利用可能なMongoDBデータベースを構築する方法について説明します。データのセキュリティとサービスが引き続き動作し続けるようにするための複数の方法を探ります。キー戦略:レプリカセット:レプリカセット:レプリカセットを使用して、データの冗長性と自動フェールオーバーを実現します。マスターノードが失敗すると、レプリカセットが自動的に新しいマスターノードを選択して、サービスの継続的な可用性を確保します。データのバックアップと回復:MongoDumpコマンドを定期的に使用してデータベースをバックアップし、データ損失のリスクに対処するために効果的な回復戦略を策定します。監視とアラーム:監視ツール(プロメテウス、グラファナなど)を展開して、MongoDBの実行ステータスをリアルタイムで監視し、

MongoDBデータベースパスワードを表示するNAVICATの方法 MongoDBデータベースパスワードを表示するNAVICATの方法 Apr 08, 2025 pm 09:39 PM

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

Centos Mongodbバックアップ戦略とは何ですか? Centos Mongodbバックアップ戦略とは何ですか? Apr 14, 2025 pm 04:51 PM

MongoDB効率的なバックアップ戦略の詳細な説明CENTOSシステムでは、この記事では、データセキュリティとビジネスの継続性を確保するために、CENTOSシステムにMongoDBバックアップを実装するためのさまざまな戦略を詳細に紹介します。 Dockerコンテナ環境でのマニュアルバックアップ、タイミング付きバックアップ、自動スクリプトバックアップ、バックアップメソッドをカバーし、バックアップファイル管理のベストプラクティスを提供します。マニュアルバックアップ:MongoDumpコマンドを使用して、マニュアルフルバックアップを実行します。たとえば、Mongodump-Hlocalhost:27017-U Username-P Password-Dデータベース名-O/バックアップディレクトリこのコマンドは、指定されたデータベースのデータとメタデータを指定されたバックアップディレクトリにエクスポートします。

Debian Mongodbでデータを暗号化する方法 Debian Mongodbでデータを暗号化する方法 Apr 12, 2025 pm 08:03 PM

DebianシステムでMongoDBデータベースを暗号化するには、次の手順に従う必要があります。ステップ1:MongoDBのインストール最初に、DebianシステムがMongoDBをインストールしていることを確認してください。そうでない場合は、インストールについては公式のMongoDBドキュメントを参照してください:https://docs.mongodb.com/manual/tutorial/install-mongodb-onedbian/-step 2:暗号化キーファイルを作成し、暗号化キーを含むファイルを作成し、正しい許可を設定します。

CentosでGitLabのデータベースを選択する方法 CentosでGitLabのデータベースを選択する方法 Apr 14, 2025 pm 04:48 PM

gitlabデータベース展開ガイドcentosシステム適切なデータベースの選択は、gitlabを正常に展開するための重要なステップです。 GitLabは、MySQL、PostgreSQL、MongoDBなど、さまざまなデータベースと互換性があります。この記事では、これらのデータベースを選択して構成する方法を詳細に説明します。データベース選択の推奨MYSQL:広く使用されているリレーショナルデータベース管理システム(RDBMS)。安定したパフォーマンスを備えており、ほとんどのGitLab展開シナリオに適しています。 POSTGRESQL:強力なオープンソースRDBMSは、大規模なデータセットの処理に適した複雑なクエリと高度な機能をサポートしています。 Mongodb:人気のNoSQLデータベース、海の扱いが上手です

Mongodbでユーザーをセットアップする方法 Mongodbでユーザーをセットアップする方法 Apr 12, 2025 am 08:51 AM

MongoDBユーザーを設定するには、次の手順に従ってください。1。サーバーに接続し、管理者ユーザーを作成します。 2。ユーザーアクセスを許可するデータベースを作成します。 3. CreateUserコマンドを使用してユーザーを作成し、その役割とデータベースアクセス権を指定します。 4. Getusersコマンドを使用して、作成されたユーザーを確認します。 5.オプションで、特定のコレクションに他のアクセス許可または付与ユーザーの権限を設定します。

See all articles