簡體   English   中英

創建API端點以根據時間獲取動態數據

[英]Create API endpoint for fetching dynamic data based on time

我有一個刮刀,定期從新聞網站上抓取文章並將它們存儲在數據庫[MYSQL]中。 刮擦的工作方式是先將最舊的物品刮掉,然后再轉到更近期的文章。

例如 ,在1月1日寫的文章將首先被刪除並給出ID 1,並且在1月2日被刪除的文章將具有ID 2

因此,與舊文章相比,最近的文章將具有更高的ID。

有多個刮刀同時運行。

現在我需要一個端點,我可以根據文章的時間戳查詢,每次獲取時我也有10篇文章的限制。

例如,當有20篇文章以時間戳1499241705發布時,當我查詢時間戳為1499241705的終點時, 出現問題,我會檢查所有文章> = 1499241705,在這種情況下,我總會得到每次相同的10篇文章,將條件改為a >意味着我會跳過11-20篇文章。 添加另一個where子句以檢查id是不成功的,因為當刮刀並發運行時,可能無法始終以正確的日期順序插入文章。

有沒有辦法可以查詢這個終點,這樣我就可以隨時獲得一致的數據,包括最新的文章,然后是舊的文章。

編輯:

   +-----------------------+
   |   id | unix_timestamp |
   +-----------------------+
   |    1 |   1000         |
   |    2 |   1001         |
   |    3 |   1002         |
   |    4 |   1003         |
   |   11 |   1000         |
   |   12 |   1001         |
   |   13 |   1002         |
   |   14 |   1003         |
   +-----------------------+

最后一個時間戳和ID通過WHERE子句發送。

例如$this->db->where('unix_timestamp <=', $timestamp); $this->db->where('id <', $offset); $this->db->order_by('unix_timestamp ', 'DESC'); $this->db->order_by('id', 'DESC'); $this->db->where('unix_timestamp <=', $timestamp); $this->db->where('id <', $offset); $this->db->order_by('unix_timestamp ', 'DESC'); $this->db->order_by('id', 'DESC');

在查詢時間戳為1003時,將獲取ID 14和4。 但是在下一次調用期間,id 4將是偏移量,從而不會獲取id 13並且僅在下一次獲取id 3時。因此數據將丟失。

兩部分:時間戳和id。

WHERE   timestamp <= $ts_leftoff
  AND ( timestamp <  $ts_leftoff
            OR id <= $id_leftoff )
ORDER BY (timestamp DESC, id DESC)

因此,假設id是唯一的,如果許多行具有相同的timestamp ,則順序是完全確定的並不重要。

有一種語法,但不幸的是它沒有很好地優化:

WHERE (timestamp, id) <= ($ts_leftoff, $id_leftoff)

所以,我建議不要使用它。

更多關於“離開”的概念: http//mysql.rjweb.org/doc.php/pagination

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM