Tôi đã có một lớp truy cập dữ liệu mà thiết lập ba hồ kết nối phpcassa trên instantiation như thế này:phpcassa hồ kết nối
try {
$this->cache = new ConnectionPool(
BSCACHE_KEYSPACE,
explode(',', BSCACHE_SERVERS),
null, null, null, null, null,
array(
'username' => BSCACHE_USERNAME,
'password' => BSCACHE_PASSWORD
)
);
$this->indexCache = new ConnectionPool(
INDEXCACHE_KEYSPACE,
explode(',', INDEXCACHE_SERVERS),
null, null, null, null, null,
array(
'username' => INDEXCACHE_USERNAME,
'password' => INDEXCACHE_PASSWORD
)
);
$this->metaCache = new ConnectionPool(
METACACHE_KEYSPACE,
explode(',', METACACHE_SERVERS),
null, null, null, null, null,
array(
'username' => METACACHE_USERNAME,
'password' => METACACHE_PASSWORD
)
);
} catch (Exception $e) {
return array($this->error['connection']);
}
Gần đây tôi đã sử dụng mã tính năng truy tìm trên máy chủ php của zend để làm một buổi biểu diễn nhỏ kiểm toán trên lớp này và nhận thấy rằng thiết lập của ba hồ bơi kết nối này đang tiêu thụ ~ 100ms. Đó là rất nhiều thời gian để mất kết nối thiết lập cho rằng mỗi kết nối chỉ được sử dụng một lần hoặc hai lần cho mỗi instantiation của lớp này.
Bất cứ ai biết về bất kỳ thủ thuật thông minh nào có thể cho phép tôi xây dựng các hồ bơi kết nối này một lần và chia sẻ chúng giữa các buổi diễn của lớp không? Có lẽ có một số cách đơn giản để làm điều đó sẽ xảy ra ngay lập tức với các nhà phát triển PHP nâng cao hơn?
UPDATE: Đã được "thành công" bộ nhớ đệm các hồ kết nối sử dụng APC, sau đó đọc thêm về kết nối liên tục và phát hiện ra tập tin connection.php của phpcassa đó (dòng 59 v 0.8.a.2) lần đọc như thế này:
$socket = new TSocket($host, $port);
... tốt, TSocket có tham số thứ ba (tùy chọn) $ tồn tại mặc định là false. Nhưng khi tôi thay đổi dòng 59 trong phpcassa để thiết lập $ tồn tại thành sự thật, các phép thử hồi quy của tôi biến tất cả thành địa ngục trên tôi. Cách họ thất bại làm cho nó trông giống như tôi đang nhấn một số "kết nối tối đa" giới hạn ở đâu đó (có lẽ là một cấu hình cassandra), vì vậy tôi bây giờ nhìn vào đó.