我正在考虑使用与memcached配对的noSQL(mongoDB)来存储我的webapp中的会话.我们的想法是,在每次页面加载时,将用户数据与memcache中的数据进行比较,如果某些内容发生了变化,数据将被写入memcached和mySQL.通过这种方式,读取将大大减少,并使用memcached来完成它最擅长的操作.
但是我有点担心使用非ACID数据库进行会话存储,尤其是使用memcached层.让我们说在将数据库更新到数据库时会出现问题,我们的用户很快就会想知道为什么他们放入购物车的产品没有出现......
什么是合适的方法?我们应该使用mySQL会话存储还是保留非酸性支持数据库用于会话?
谢谢!
我正在使用PHP和mongodb开发一个网站.我用PECL-mongo访问mongodb ,并且遇到了烦恼.我时不时地得到这样的错误(我已经对这些路径进行了匿名)
Fatal error: Uncaught exception 'MongoCursorException' with message 'couldn't get response header' in
/PATH/index.php:38 Stack trace: #0
/PATH/index.php(38): MongoCursor->rewind() #1
/PATH/template.inc(29): get_sidebar() #2
/PATH/index.php(13):
require_once('PATH/...') #3 {main} thrown in PATH/index.php on line 38
Run Code Online (Sandbox Code Playgroud)
根据文档,这意味着:
驱动程序无法从数据库中获取回复标头,因此它放弃了.检查数据库是否仍在运行并且网络已连接,然后再次尝试查询.
但我知道数据库已启动,因为我在我自己的机器上本地执行环回.没有与外界联系.
再试一次经常有效.这可能是PHP的mongo驱动程序中的一个错误吗?这可能是一个"错误编译"的问题(我从源代码编译,但有非常良性的标志,-march=native -O2)?
谁看过这个吗?
搜索周围,我只看到一些愚蠢的Facebook游戏的引用有相同的错误.
编辑:我刚刚将我的PECL驱动程序降级到1.1.4版本,到目前为止,问题似乎已经消失.所以这可能只是1.2.x系列中的一个错误.如果有人能够对它有所了解,那就太好了.
编辑:我在这里没有做任何复杂的事情,有问题的代码看起来像这样:
$m = new Mongo();
$collection = $m->my_db->collection;
$results = $collection->find(array("favorite"=>true))->limit(5);
Run Code Online (Sandbox Code Playgroud) 我想知道为什么我得到以下php通知:
( ! ) Notice: Mongo::__construct(): parsing servers in C:\htdocs\multishop\library\Lupi\Resource\Odm.php on line 38
Call Stack
# Time Memory Function Location
1 0.0004 138504 {main}( ) ..\index.php:0
2 0.0130 667392 Zend_Application->bootstrap( ) ..\index.php:25
3 0.0130 667488 Zend_Application_Bootstrap_BootstrapAbstract->bootstrap( ) ..\Application.php:355
4 0.0130 667504 Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap( ) ..\BootstrapAbstract.php:586
5 0.0442 2068704 Zend_Application_Bootstrap_BootstrapAbstract->_executeResource( ) ..\BootstrapAbstract.php:626
6 0.0442 2068832 Lupi_Resource_Odm->init( ) ..\BootstrapAbstract.php:683
7 0.0596 2778880 Mongo->__construct( ) ..\Odm.php:38
Run Code Online (Sandbox Code Playgroud)
第38行:
$dm = DocumentManager::create(new \Doctrine\MongoDB\Connection(new \Mongo), $config);
Run Code Online (Sandbox Code Playgroud)
通知有时会出现,而不是所有时间.我正在使用doctrine mongo ODM.
我无法弄清楚如何在PHP中构建更新查询,以更新文档ID X,Y和Z.有没有人有这方面的经验?
$ids[] = array(
new MongoId('4eaaf929498fe2c80300000c'),
new MongoId('4eaaff24498fe2ba0900001f')
);
$collection->update(
array('_id' => array('$in' => $ids)),
array('$set' => array("title"=>"test")),
array("upsert" => true)
);
Run Code Online (Sandbox Code Playgroud) 我有以下PHP脚本基本上连接到MongoDB,写入文档,然后关闭连接19000次:
<?php
for($i=0; $i < 19000; $i++) {
$con = new Mongo("mongodb://localhost:27017");
$db = $con->selectDB('test');
$col = $db->selectCollection('close_wait_test');
$col->insert(array('Test' => 'Value1'));
$con->close();
}
?>
Run Code Online (Sandbox Code Playgroud)
运行此脚本一次运行正常,但如果我在几秒钟后运行脚本,我会得到"无法分配请求的地址"异常,这是可以理解的,因为服务器系统可能用完了端口.
但是,如果我删除$ con> close(); 我可以一遍又一遍地运行该脚本,而不会对数据库造成任何明显的压力.我假设这是因为连接到数据库是持久的并且在脚本上重用相同的初始连接.
我想知道的是,如果20K +不同用户运行1圈这个脚本的同时,会发生什么样的数据库?例如,可用连接是否会耗尽,因为每个用户需要创建一个到数据库的连接?或者所有这些用户都使用第一个用户创建的相同初始连接?
我有这样的文件(这是非常简化的):
{
'name' : 'test',
'age' : 16
}
Run Code Online (Sandbox Code Playgroud)
还有这个
{
'name' : 'test2'
}
Run Code Online (Sandbox Code Playgroud)
如果不存在,我想将所有'年龄'设置为14.
我怎样才能做到这一点?
我使用聚合和管道查询我的数据库,有两个单独的查询:
$groups_q = array(
'$group' => array(
'_id' => '$group_name',
'total_sum' => array('$sum' => 1)
)
);
$statuses_q = array(
'$group' => array(
'_id' => '$user_status',
'total_sum' => array('$sum' => 1)
)
);
$data['statuses'] = $this->mongo_db->aggregate('users',$statuses_q);
$data['groups'] = $this->mongo_db->aggregate('users',$groups_q);
Run Code Online (Sandbox Code Playgroud)
我得到了我想要的东西:
Array
(
[statuses] => Array
(
[result] => Array
(
[0] => Array
(
[_id] => Inactive
[total_sum] => 2
)
[1] => Array
(
[_id] => Active
[total_sum] => 5
)
)
[ok] => 1
)
[groups] => Array …Run Code Online (Sandbox Code Playgroud) 我在这个网站上安装了我的ubuntu中的rockmongo .当我试图从浏览器打开rockmongo时,它显示出致命的错误,如下所述.
错误:
Fatal error: ini_set(): To prevent data corruption, you are not allowed to turn on the mongo.native_long setting on 32-bit platforms in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题,任何人都可以为我解决这个问题.
我正在使用codeigniter和mongodb数据库创建应用程序.由于codeigniter不包含mongodbs驱动程序,我使用内置库连接mongodb.我用这个链接创建了mongodb configration文件和Mongo_db库.配置文件就像application\config\mongodb:
<?php
$config['default']['mongo_hostbase'] = 'localhost:27017';
$config['default']['mongo_database'] = 'test';
$config['default']['mongo_username'] = '';
$config['default']['mongo_password'] = '';
$config['default']['mongo_persist'] = FALSE;
$config['default']['mongo_persist_key'] = 'ci_persist';
$config['default']['mongo_replica_set'] = FALSE;
$config['default']['mongo_query_safety'] = 'safe';
$config['default']['mongo_suppress_connect_error'] = FALSE;
$config['default']['mongo_host_db_flag'] = FALSE;
?>
Run Code Online (Sandbox Code Playgroud)
和Mongo_db库是这样的:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Mongo_db
{
public function __construct()
{
//Check mongodb is installed in your server otherwise display an error
if ( ! class_exists('Mongo'))
{
$this->_show_error('The MongoDB PECL extension has not been installed or enabled', …Run Code Online (Sandbox Code Playgroud) mongodb-php ×10
php ×8
mongodb ×7
codeigniter ×3
doctrine ×1
doctrine-odm ×1
mysql ×1
nosql ×1
session ×1