0

<のようなmysqlにあるリクエストを実行したい-from SELECT * FROM '.$category.'テーブルはランダムであり、POSTを介して与えられます。どうすればこれを行うことができMongoDBますか?

私は次のように始めました:

$db->$category->

$category = $_POST['category'];
$category = $liste[$category];

誰か助けてくれませんか?ところで。:

パフォーマンスの問題:

mongodbで複数のコレクションを実行する方が、何らかの理由で高速ですか?たとえば、100万個ごとに10個のコレクションを配置しますか、それとも1,000万個を含む1個のコレクションを配置しますか?

敬具

4

3 に答える 3

3

$db->selectCollection( $category )->find();

これにより、特定のコレクションからのすべての結果がMongoCursorオブジェクトとして提供されます。他に何を探しているのかわからない。

于 2012-11-12T13:37:46.507 に答える
1

mongodbで複数のコレクションを実行する方が、何らかの理由で高速ですか?たとえば、100万個ごとに10個のコレクションを配置しますか、それとも1,000万個を含む1個のコレクションを配置しますか?

多くのデータベースと同様に、MongoDBは水平方向に拡張できますが、それだけでなく、これらの問題に関するMongoDBの内部は、DBレベルで機能することを好みます(つまり、DBレベルのロックがあり、読み取りロックは同時に実行されます)。

これは古典的な質問です:データベースをどのようにスケーリングするか?

これは広大で、規模と幅がほとんど無形のトピックです。「データベーススケーリング」、より具体的には「mongodbスケーリング」について何らかの理由で最初にGoogle検索を行うことをお勧めします。

MongoDBとMySQLはどちらも、1つのコレクションで1,000万件のレコードを簡単に処理でき、それらを分離しても、パフォーマンスがまったく向上しない可能性があります。

2つのコレクションを持っている方が良いでしょう:-postそしてそれによってあなたは次のようにカテゴリドキュメントのをcategory介して投稿を選択します:_id

$db->post->find(array('category' => new MongoId('blah')));

非常識な(境界線の愚かな)同時書き込み量を取得し、単一のデータベースのロックを飽和させる場合、コレクション(データ)を別々のデータベースに分割すると思いますが、私はあなたを非常に疑っていますこれまでにそれが必要です。

于 2012-11-12T14:09:16.867 に答える
1

ほんの数分でmongodbphp拡張機能の基本を読むことをお勧めします http://www.php.net/manual/en/mongocollection.find.php

始めるのは簡単で、例に従うことができます。

パフォーマンスに関しては、セットアップに大きく依存します。

2つのコレクションを作成し、デモデータを入力しました。

100万:

for (var i=0; i<100000; i++) { cat = { name : 'category'+i }; db.onemillion.save(cat); }

1000万:

for (var i=0; i<10000000; i++) { cat = { name : 'category'+i }; db.tenmillion.save(cat); }

私のセットアップ/ハードウェアでは、これらはカテゴリ名をクエリした結果です。

100万:

> db.onemillion.find({'name':'category12345'}).explain();
{
    "cursor" : "BasicCursor",
    "isMultiKey" : false,
    "n" : 1,
    "nscannedObjects" : 1000000,
    "nscanned" : 1000000,
    "nscannedObjectsAllPlans" : 1000000,
    "nscannedAllPlans" : 1000000,
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 1,
    "nChunkSkips" : 0,
    "millis" : 331,
    "indexBounds" : {

    },
    "server" : "station7.local:27017"
}
>

1000万:

> db.tenmillion.find({'name':'category12345'}).explain();
{
    "cursor" : "BasicCursor",
    "isMultiKey" : false,
    "n" : 1,
    "nscannedObjects" : 10000000,
    "nscanned" : 10000000,
    "nscannedObjectsAllPlans" : 10000000,
    "nscannedAllPlans" : 10000000,
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 4,
    "nChunkSkips" : 0,
    "millis" : 3301,
    "indexBounds" : {

    },
    "server" : "station7.local:27017"
}
> 

予想通り。

これを使用して、ケースをテストできます。

1000万のカテゴリのコレクションのユースケースを想像することはできません。

したがって、より多くの情報を提供できれば、より良いでしょう。

于 2012-11-12T14:09:39.037 に答える