Hướng dẫn dùng 500000 milliseconds trong PHP

Khi bạn đang sử dụng Postgres, dấu thời gian của bạn có thể cóTIME WITH TIMEZONE

Ví dụ: "2018-04-19 07:01:19.929554" .

Trong trường hợp như vậy, phải thêm một Mutator ngày vào Model của bạn.

Trong Mô hình của bạn, hãy thêm trường này cho trình thay đổi ngày:

protected $dateFormat = 'Y-m-d H:i:sO';

Giải pháp thay thế:

Vì bạn có sự kết hợp của các dấu thời gian có và không có mili giây, tôi khuyên bạn nên thử giải pháp này bằng cách sử dụng các trình đột biến trường Laravel:

format('Y-m-d H:i:s')
    }
}

1 hữu ích 4 bình luận chia sẻ

Nếu bạn đang sử dụng trình điều khiển gốc mysql (phổ biến kể từ php 5.3) và tiện ích mở rộng mysqli , bạn có thể thực hiện điều này bằng một truy vấn không đồng bộ:

query($sql, MYSQLI_ASYNC | MYSQLI_USE_RESULT);
$links = $errors = $reject = [];
$links[] = $mysqli;

// wait up to 1.5 seconds
$seconds = 1;
$microseconds = 500000;

$timeStart = microtime(true);

if (mysqli_poll($links, $errors, $reject, $seconds, $microseconds) > 0) {
    echo "query finished executing. now we start fetching the data rows over the network...\n";
    $result = $mysqli->reap_async_query();
    if ($result) {
        while ($row = $result->fetch_row()) {
            // print_r($row);
            if (microtime(true) - $timeStart > 1.5) {
                // we exceeded our time limit in the middle of fetching our result set.
                echo "timed out while fetching results\n";
                var_dump($mysqli->close());
                break;
            }
        }
    }
} else {
    echo "timed out while waiting for query to execute\n";

    // kill the thread to stop the query from continuing to execute on 
    // the server, because we are abandoning it.
    var_dump($mysqli->kill($mysqli->thread_id));
    var_dump($mysqli->close());
}

Các cờ tôi đang đưa cho mysqli_query thực hiện những việc quan trọng. Nó yêu cầu trình điều khiển máy khách bật chế độ không đồng bộ, trong khi buộc chúng tôi sử dụng nhiều mã dài dòng hơn, nhưng cho phép chúng tôi sử dụng thời gian chờ (và cũng đưa ra các truy vấn đồng thời nếu bạn muốn!). Cờ khác báo cho máy khách không đệm toàn bộ tập kết quả vào bộ nhớ.

Theo mặc định, php cấu hình các thư viện máy khách mysql của nó để tìm nạp toàn bộ tập kết quả của truy vấn của bạn vào bộ nhớ trước khi cho phép mã php của bạn bắt đầu truy cập các hàng trong kết quả. Điều này có thể mất nhiều thời gian để chuyển một kết quả lớn. Chúng tôi vô hiệu hóa nó, nếu không, chúng tôi có nguy cơ hết thời gian chờ đợi quá trình lưu vào bộ đệm hoàn tất.

Lưu ý rằng có hai nơi mà chúng tôi cần kiểm tra xem có vượt quá giới hạn thời gian hay không:

  • Thực thi truy vấn thực tế
  • trong khi tìm nạp kết quả (dữ liệu)

Bạn có thể thực hiện tương tự trong phần mở rộng PDO và mysql thông thường. Chúng không hỗ trợ các truy vấn không đồng bộ, vì vậy bạn không thể đặt thời gian chờ cho thời gian thực hiện truy vấn. Tuy nhiên, chúng hỗ trợ các tập kết quả không có bộ đệm và vì vậy ít nhất bạn có thể triển khai thời gian chờ khi tìm nạp dữ liệu.

Đối với nhiều truy vấn, mysql có thể bắt đầu phát trực tuyến kết quả cho bạn gần như ngay lập tức và vì vậy chỉ riêng các truy vấn không có bộ đệm sẽ cho phép bạn triển khai phần nào hiệu quả thời gian chờ trên một số truy vấn nhất định. Ví dụ, một

select * from tbl_with_1billion_rows

có thể bắt đầu phát trực tuyến các hàng ngay lập tức, nhưng,

select sum(foo) from tbl_with_1billion_rows

cần xử lý toàn bộ bảng trước khi nó có thể bắt đầu trả lại hàng đầu tiên cho bạn. Trường hợp thứ hai này là thời gian chờ trên một truy vấn không đồng bộ sẽ giúp bạn tiết kiệm. Nó cũng sẽ giúp bạn thoát khỏi những bế tắc cũ và những thứ khác.

ps - Tôi đã không bao gồm bất kỳ logic thời gian chờ nào trên chính kết nối.

9 hữu ích 2 bình luận chia sẻ