标签:mongodb

浏览模式: 标准 | 列表 | 图文
Yii的又一个BUG?

Yii的又一个BUG?

先申明一下,这个可能不是BUG。只是算起来是实现的方式不一样而已。
场景:我有一个MYSQL数据库,但是现在容量越来越大,主要是因为其中有大字段,多个大字段,所以在查询的时候会特别特别慢。所以想到用mongo来存储一些查询用的结构。单条的时候,我还是准备采用MYSQL。当然其实单条用mongo也合适。不过因为迁移数据有点麻烦,所以还是先忍忍,一步一步来。

测试阶段:因为MYSQL to MONGO有点小麻烦,没有现成的工具。官方说有mongoimport,我看过了,确实OK,但是只支持一些基础的结构,比如:json,csv等。其他的则需要第三方工具。但我自己先在测试中,所以就直接写了个脚本,先将数据用AR取出来。然后插入到mongo中。结果发现,在排序的时候。。9999比10000还大。问了一下神仙 ,他说这应该是按字符串排序的方式来做的。

于是做了一个测试,写进了一个数字,果然就对了。。难道是yii的AR的BUG?想想这不太应该啊。于是我写了一个小的Demo:

$db = mysql_connect("localhost","root","123456");
mysql_select_db("feed");
$query = mysql_query("select id from feeds_group limit 1");
while($rs = mysql_fetch_array($query)){
$result = $rs;
echo "<pre>";
var_dump($result);
echo "</pre>";
}
echo "<hr />";
$dsn = 'mysql:host=localhost;dbname=feed';
$user = 'root';
$password = '123456';
$dbh = new PDO($dsn, $user, $password);
$sth = $dbh->prepare("select id from feeds_group limit 1");
$sth->execute();
$result = $sth->fetchAll();
echo "<pre>";
var_dump($result);
echo "</pre>";

打印出来一看:

array(2) {
[0]=>
string(1) "1"
["id"]=>
string(1) "1"
}

array(1) {
[0]=>
array(2) {
["id"]=>
string(1) "1"
[0]=>
string(1) "1"
}
}

果然出来就是字符串了,最后只能自己在插到mongo的时候写了一个小函数,对于数值型字段做了转换,问题就这样解决了。

mongodb 与 redis混用

mongodb 与 redis混用

本来一直在用redis,也没有觉得不爽,直到我需要对数据进行排序。。。进行条件查询。
一下子问题就来了。redis不支持这种条件查询。
于是。。我先hmGetAll,然后利用usort先排一下序,然后再利用数组的slice进行切分。这么一处理。。只有3000多条数据,0.2秒就这么浪费了。我晕啊。这怎么可以。。。这不科学啊。

于是,0.001949 一下子就刺瞎了我的钛金狗眼。
因为mongo的查询没有redis那样方便。于是在hashset的这一块,和list的这一块,我还是用redis方便,毕竟可以当成一个简单的链表处理,还是很方便的。。

对于有条件的查询,还是用mongoDB会更方便一点。测试了一下。原来只需要mongodb 512M内存就足够了,哥很大方,给了他1G,小样,你还不开心?