现在我们有一个大型的perl应用程序,它使用原始DBI连接到MySQL并执行SQL语句.它每次都创建一个连接并终止.开始接近mysql的连接限制(一次200)
看起来DBIx :: Connection支持应用程序层连接池.
有没有人有过经历DBIx::Connection?连接池是否还有其他注意事项?
我还看到mod_dbd哪个是Apache mod,它看起来像处理连接池.
http://httpd.apache.org/docs/2.1/mod/mod_dbd.html
我正在使用适用于PHP的AWS 2.3.2 SDK尝试使用它们的流包装器从S3下载一个大文件(~4g),这应该允许我使用fopen/fwrite将文件写入磁盘而不是缓冲区记忆.
这是参考:
http://docs.aws.amazon.com/aws-sdk-php-2/guide/latest/service-s3.html#downloading-data
这是我的代码:
public function download()
{
$client = S3Client::factory(array(
'key' => getenv('S3_KEY'),
'secret' => getenv('S3_SECRET')
));
$bucket = getenv('S3_BUCKET');
$client->registerStreamWrapper();
try {
error_log("calling download");
// Open a stream in read-only mode
if ($stream = fopen('s3://'.$bucket.'/tmp/'.$this->getOwner()->filename, 'r')) {
// While the stream is still open
if (($fp = @fopen($this->getOwner()->path . '/' . $this->getOwner()->filename, 'w')) !== false){
while (!feof($stream)) {
// Read 1024 bytes from the stream
fwrite($fp, fread($stream, 1024));
}
fclose($fp);
}
// Be sure to close …Run Code Online (Sandbox Code Playgroud) 我在编写递归函数以遍历此层次结构时遇到麻烦
object(stdClass)#290 (6) {
["category_id"]=>
int(1)
["parent_id"]=>
int(0)
["name"]=>
string(4) "Root"
["position"]=>
int(0)
["level"]=>
int(0)
["children"]=>
array(2) {
[0]=>
object(stdClass)#571 (7) {
["category_id"]=>
int(2)
["parent_id"]=>
int(1)
["name"]=>
string(18) "Root MySite.com"
["is_active"]=>
int(0)
["position"]=>
int(0)
["level"]=>
int(1)
["children"]=>
array(11) {
[0]=>
object(stdClass)#570 (7) {
["category_id"]=>
int(15)
["parent_id"]=>
int(2)
["name"]=>
string(9) "Widgets"
["is_active"]=>
int(1)
["position"]=>
int(68)
["level"]=>
int(2)
["children"]=>
array(19) {
[0]=>
object(stdClass)#566 (7) {
["category_id"]=>
int(24)
["parent_id"]=>
int(15)
["name"]=>
string(16) "Blue widgets"
["is_active"]=>
int(1)
["position"]=>
int(68)
["level"]=>
int(3)
["children"]=>
array(0) { …Run Code Online (Sandbox Code Playgroud) 我在ElasticSearch v1.2.1中有一些文档,如:
{
"tempSkipAfterSave": "false",
"variation": null,
"images": null,
"name": "Dolce & Gabbana Short Sleeve Coat",
"sku": "MD01575254-40-WHITE",
"user_id": "123foo",
"creation_date": null,
"changed": 1
}
Run Code Online (Sandbox Code Playgroud)
其中sku可以是一个变化,例如:MD01575254-40-BlUE,MD01575254-38-WHITE
我可以使用弹性搜索查询来处理这个问题:
{
"size": 1000,
"from": 0,
"filter": {
"and": [
{
"regexp": {
"sku": "md01575254.*"
}
},
{
"term": {
"user_id": "123foo"
}
},
{
"missing": {
"field": "project_id"
}
}
]
},
"query": {
"match_all": {}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了sku的所有变化: MD01575254*
然而,破折号' - '真的搞砸了我
当我将正则表达式更改为:
"regexp": {
"sku": "md01575254-40.*" …Run Code Online (Sandbox Code Playgroud) 我有一些PHP代码连接到购物车API(SOAP)端点.这不是针对一个中央服务器,而是针对任意数量的用户的特定端点URL.
现在我有几个不同的类,它们都创建自己与用户API的连接.
例如,
CartProduct.php - > updateProduct()(创建api连接)
CartCategory.php - > updateCategory()(创建api连接)
我正在考虑使用Singleton来共享远程连接,但在阅读了有关SO和一些博客的问题之后,显然每个人都讨厌Singleton.
就我而言,我认为连接池没有意义.我正在连接到远程用户的网站,所以我不只是想打开5个连接并且可能会减慢他们的网站速度.我想在这种情况下我真的想在这个应用程序调用之间共享一个连接.我认为在数据库的情况下,连接池是有意义的,但不适用于远程用户API.从理论上讲,我想我们应该考虑如果用户同时尝试运行updateProduct和updateCategory会发生什么......会破坏系统吗?
是否有一个设计模式在这里有意义打开一个连接,几个不同的类可以共享?