Mysql

儲存訪問的最佳做法是什麼?

  • October 19, 2021

我想將訪問保存在表格中。我正在使用 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 地址。

引用自:https://dba.stackexchange.com/questions/301359