2012-03-15 33 views
5

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 đó.

Trả lời

1

Cuối cùng, tôi không gây nhầm lẫn với thông số tồn tại của TSocket $ ... thay vào đó chúng tôi đã biên soạn thư viện tiết kiệm đi kèm với phpcassa và bật apc (tôi đã không lưu trữ bộ nhớ cache kết nối rõ ràng, nhưng apc là bộ nhớ đệm mã hóa , v.v.) Giữa hai thay đổi đó, thời gian thiết lập hồ bơi kết nối của tôi cho ba hồ bơi rơi vào phạm vi mili giây một chữ số ... có nghĩa là tôi đang gặp các tắc nghẽn khác.

Các vấn đề liên quan