Mysql
儲存訪問的最佳做法是什麼?
我想將訪問保存在表格中。我正在使用 MySQL,但我不確定應該如何保存訪問,因為記錄可能會大大增加,這可能會導致性能問題,而且我也擔心 MySQL 的限制(它可以處理多少記錄等)。
據我所知,我可以通過兩種不同的方式做到這一點:
第一種方式:
為每次訪問創建記錄
第二種方式:
我可以創建記錄並在
number_of_visits
每次訪問時更新/增加欄位所以我的問題是:
有什麼真正的區別嗎?如果我選擇一種方法而不是另一種方法,則會出現嚴重的性能問題,因為第一種方法中的記錄數可能比第二種方法多得多?
如果您只需要儲存聚合,那麼儲存它們是一個好主意。
與聚合一樣,
visitor_ip
它將是唯一的,我們不妨將其設為主鍵。在 MariaDB-10.5 或更高版本中,您可以使用inet6 類型:
CREATE TABLE visits (ip inet6 NOT NULL PRIMARY KEY, number_of_visits int NOT NULL);
並根據需要使用 IPv4 映射地址進行更新:
INSERT INTO visits VALUES ('::127.0.0.1',1) ON duplicate KEY UPDATE number_of_visits=number_of_visits+1
參考:範例小提琴
如果使用較舊的 MariaDB 版本或 MySQL,
varbinary(16)
像這個答案:CREATE TABLE visits (ip varbinary(16) NOT NULL PRIMARY KEY, number_of_visits int NOT NULL)
插入:
INSERT INTO visits VALUES (INET6_ATON('127.0.0.1'),1) ON duplicate KEY UPDATE number_of_visits=number_of_visits+1
並檢索:
select INET6_NTOA(ip), number_of_visits from visits
參考:範例小提琴
這兩個範例都採用 IPv6 地址。