0

我想做一个在 mysql 中的请求,比如 SELECT * FROM '.$category.'<-- from 表是随机的,它通过 POST 给出。我该怎么做MongoDB

我开始喜欢:

$db->$category->

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

谁能帮帮我吗?顺便提一句。:

性能问题:

在 mongodb 中做一个以上的集合是否有任何理由更快?例如,我放了 10 个集合,每个集合 100 万,或者 1 个集合 1000 万?

亲切的问候

4

3 回答 3

3

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

这将为您提供来自某个集合的所有结果作为 MongoCursor 对象。不确定您还在寻找什么。

于 2012-11-12T13:37:46.507 回答
1

在 mongodb 中做一个以上的集合是否有任何理由更快?例如,我放了 10 个集合,每个集合 100 万,或者 1 个集合 1000 万?

与许多数据库一样,MongoDB 可以水平扩展,不仅如此,MongoDB 在这些问题上的内部结构更喜欢在 DB 级别上工作(即它有一个 DB 级别的锁,虽然读锁是并发的)。

这是一个经典问题:如何扩展数据库?

这是一个巨大的话题,在规模和广度上几乎是无形的。我建议您出于某种原因首先在“数据库扩展”或更具体的“mongodb 扩展”上进行 Google 搜索。

MongoDB 和 MySQL 都可以轻松地在一个集合中处理 1000 万条记录,并且将它们分开可能绝对不会带来前所未有的性能提升。

您最好只拥有两个集合:-post并且您可以通过类别文档category选择一个帖子,如下所示:_id

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

我想如果您要获得疯狂(边界线愚蠢)的并发写入量并且您要使单个数据库上的锁饱和,那么您会将集合(数据)拆分为单独的数据库,但是,我非常怀疑您永远需要那个。

于 2012-11-12T14:09:16.867 回答
1

我建议您花几分钟时间阅读 mongodb php 扩展的基础知识 http://www.php.net/manual/en/mongocollection.find.php

它很容易上手,您可以按照示例进行操作。

关于性能,这在很大程度上取决于您的设置。

我创建了两个集合并填充了演示数据:

一百万:

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

一千万:

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

在我的设置/硬件上,这些是查询类别名称的结果:

一百万:

> 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"
}
>

一千万:

> 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"
}
> 

正如预期的那样。

您可以使用它来测试您的案例。

我无法想象一千万个类别集合的用例。

因此,如果您能提供更多信息,那就更好了。

于 2012-11-12T14:09:39.037 回答