我想做一个像SELECT * FROM '.$category.'
<这样的mysql中的请求 - 来自表是随机的,它是通过POST给出的。我如何在MongoDB
?
我开始喜欢:
$db->$category->
$category = $_POST['category'];
$category = $liste[$category];
任何人都可以帮助我吗? 顺便说一句。 :
性能问题:
是否有任何理由更快地在mongodb中执行一个集合? 例如,我放了10个收藏品,其中每个100万个,或者1个,含有1000万个?
亲切的问候
答案 0 :(得分:3)
$db->selectCollection( $category )->find();
这将为您提供某个集合中作为MongoCursor对象的所有结果。不确定你还在寻找什么。
答案 1 :(得分:1)
在mongodb中做一个以上的集合是否更快?例如,我放了10个收藏品,其中每个100万个,或者1个,含有1000万个?
与许多数据库一样,MongoDB可以横向扩展,不仅如此,MongoDBs内部这些事情更喜欢在数据库级别上工作(即它具有数据库级锁定,但读锁定是并发的)。
这是一个经典的问题:如何扩展数据库?
这是一个广泛而且几乎无法在规模和广度上解决的话题。我建议您首先在“数据库缩放”或更具体的“mongodb缩放”上进行谷歌搜索。
MongoDB和MySQL都可以轻松处理一个集合中的1000万条记录,将它们分离出去可能绝对不会带来任何性能提升。
您最好只拥有两个系列: - post
和category
,您可以通过类别文档的_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"
}
>
正如所料。
你可以用它来测试你的情况。
我无法想象一千万个类别的用例。
因此,如果您能提供更多信息,那就更好了。