簡體   English   中英

根據CSV,每隔x分鍾用PHP更新整個表格

[英]Update a whole table with PHP every x minutes according to a CSV

我必須每10分鍾用PHP更新MySQL數據庫中的一個大表(產品)。 我必須使用cron作業運行PHP腳本,並從CSV文件中獲取最新的產品。 該表目前有大約18000行,不幸的是我不知道它會在10分鍾內變化多少。 最重要的當然是我不希望用戶在后台注意到更新。

這些是我的想法和恐懼:

  • Idea1:我知道有一種方法可以將csv文件加載到帶有MySQL 的表中 ,所以也許我可以使用事務來截斷表,然后導入CSV。 但即使我使用事務,只要表很大,我擔心某些用戶看到空數據庫的可能性很小。

  • Idea2:我可以將舊的和新的csv文件與庫進行比較 ,只更新/添加/刪除更改的行。 這種方式我覺得用戶不可能看到一個空的數據庫,但我擔心這種方法會耗費大量的RAM和CPU,而且我在共享主機上。

所以基本上我想知道哪種方法最安全地更新表而沒有用戶注意到它。

假設InnoDB和默認隔離級別,您可以啟動事務,刪除所有行,插入新行,然后提交。 在提交完成之前,用戶將看到以前的狀態。

事務處於打開狀態(刪除后),更新將阻止,但SELECT不會。 由於它是用戶的只讀表,因此不會出現問題。 在交易開放時,他們仍然可以SELECT

您可以通過閱讀MVCC了解詳細信息。 它的要點是,只要有人執行SELECT ,MySQL就會使用數據庫中的數據和回滾段來獲取先前的狀態,直到提交或回滾事務為止。

來自MySQL文檔

InnoDB使用回滾段中的信息來執行事務回滾中所需的撤消操作。 它還使用該信息構建行的早期版本以進行一致讀取。

只有在提交完成后,用戶才會看到新數據而不是舊數據,並且在當前事務結束之前,他們不會看到新數據。

暫無
暫無

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

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