手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:mongodb

Yii的又一个BUG?

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

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

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

PHP代码
  1. $db = mysql_connect("localhost","root","123456");  
  2. mysql_select_db("feed");  
  3. $query = mysql_query("select id from feeds_group limit 1");  
  4. while($rs = mysql_fetch_array($query)){  
  5.     $result = $rs;  
  6.     echo "<pre>";  
  7.     var_dump($result);  
  8.     echo "</pre>";  
  9. }  
  10. echo "<hr />";  
  11. $dsn = 'mysql:host=localhost;dbname=feed';  
  12. $user = 'root';  
  13. $password = '123456';  
  14. $dbh = new PDO($dsn$user$password);  
  15. $sth = $dbh->prepare("select id from feeds_group limit 1");  
  16. $sth->execute();  
  17. $result = $sth->fetchAll();  
  18. echo "<pre>";  
  19. var_dump($result);  
  20. echo "</pre>";  

打印出来一看:

XML/HTML代码
  1. array(2) {  
  2.   [0]=>  
  3.   string(1) "1"  
  4.   ["id"]=>  
  5.   string(1) "1"  
  6. }  
  7.   
  8. array(1) {  
  9.   [0]=>  
  10.   array(2) {  
  11.     ["id"]=>  
  12.     string(1) "1"  
  13.     [0]=>  
  14.     string(1) "1"  
  15.   }  
  16. }  

 

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

 

 

 

 

Tags: yii, mongodb, mysql, string

mongodb 与 redis混用

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

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

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

Tags: nosql, mongodb, redis