2010-06-08 40 views
8

Tôi có dự án phát triển sử dụng cakephp đó là nhận được dữ liệu từ DBS khác nhau, nhưng nếu một trong những đề tài cơ sở dữ liệu một số trang không mở và cung cấp cho tôi những lỗi sau: bảngcơ sở dữ liệu CakePHP không tìm thấy

Cơ sở dữ liệu tablenae cho mô hình moedlname không tìm thấy.

..và tôi có trong trang này dữ liệu khác được hiển thị từ cơ sở dữ liệu khác có thể hoạt động.

cách tôi có thể xác định liệu cơ sở dữ liệu có đang ngoại tuyến bằng bánh hay không và tôi có thể làm cho mô hình này đọc từ một nơi khác như tệp bộ nhớ cache cho đến khi khởi động lại cơ sở dữ liệu.

+0

Hmmm. Bạn có cúp cơ sở dữ liệu khổng lồ như vậy mà điều này thực sự cần thiết? Tại sao? –

+0

cơ sở dữ liệu nguồn cấp dữ liệu (giá cổ phiếu DB) Pekka – SMSM

Trả lời

2

Có lẽ một cách tiếp cận tốt hơn là kết quả bộ nhớ cache và đọc từ bộ nhớ cache, chỉ nhấn DB khi cần thiết ...

<?php 
$cacheKey = 'myCacheNumber1'; 
if (($data = Cache::read($cacheKey)) === false) { 
    $data = $this->Model->find('all'); 
    if ($data) { 
     Cache::write($cacheKey, $data); 
    } 
} 
?> 

Vấn đề ở đây là nó giả định mô hình và cơ sở dữ liệu kết nối có sẵn cho thời gian khi bộ nhớ cache không tồn tại (hoặc đã hết hạn), và nếu nó không được, bạn vẫn sẽ nhận được các lỗi tương tự, nhưng tần số chắc chắn sẽ được giảm.

Tôi nghĩ rằng để kiểm tra xem DB có sẵn ở tất cả sẽ yêu cầu một số thủ thuật mã tùy chỉnh vì phương pháp lõi bánh của kết nối giả định thành công và thất bại nặng nề khi không có sẵn. Tôi có thể tạo một thành phần với các phương thức kết nối PHP chuẩn để kiểm soát nếu bạn cố gắng tải một mô hình.

<?php 
$cacheKey = 'myCacheNumber1'; 
if (($data = Cache::read($cacheKey)) === false) { 
    if ($this->DbTest->check('hostname','username','password')) { 
     $data = $this->Model->find('all'); 
     if ($data) { 
      Cache::write($cacheKey, $data); 
     } 
    } 
} 
?> 
<?php 
// app/controllers/components/db_test.php 
class DbTestComponent extends Object { 
    function check($hostname,$username,$password) { 
     $result = true; 
     $link = @mysql_connect($hostname,$username,$password); 
     if (!$link) { 
      $result = false; 
     } 
     @mysql_close($link); 
     return $result; 
    } 
} 
?> 
Các vấn đề liên quan