SELECT * FROM $ category

时间:2012-11-12 13:30:57

标签: php mysql performance mongodb

我想做一个像SELECT * FROM '.$category.'<这样的mysql中的请求 - 来自表是随机的,它是通过POST给出的。我如何在MongoDB

中执行此操作

我开始喜欢:

$db->$category->

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

任何人都可以帮助我吗? 顺便说一句。 :

性能问题:

是否有任何理由更快地在mongodb中执行一个集合? 例如,我放了10个收藏品,其中每个100万个,或者1个,含有1000万个?

亲切的问候

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

  

在mongodb中做一个以上的集合是否更快?例如,我放了10个收藏品,其中每个100万个,或者1个,含有1000万个?

与许多数据库一样,MongoDB可以横向扩展,不仅如此,MongoDBs内部这些事情更喜欢在数据库级别上工作(即它具有数据库级锁定,但读锁定是并发的)。

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

这是一个广泛而且几乎无法在规模和广度上解决的话题。我建议您首先在“数据库缩放”或更具体的“mongodb缩放”上进行谷歌搜索。

MongoDB和MySQL都可以轻松处理一个集合中的1000万条记录,将它们分离出去可能绝对不会带来任何性能提升。

您最好只拥有两个系列: - postcategory,您可以通过类别文档的_id选择帖子,如下所示:

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

我想如果你得到一个疯狂的(边界线愚蠢)并发写入数量并且你要使单个数据库上的锁饱和,你会将集合(数据)分成不同的数据库,但是,我会非常怀疑你是否需要它。

答案 2 :(得分: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"
}
> 

正如所料。

你可以用它来测试你的情况。

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

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