在用户的活动日志中存储数据库内的IP

时间:2018-04-28 07:42:36

标签: php database

我为我的网站构建了一种登录系统,我想在数据库中记录用户的活动。问题在于每次都存储用户的IP。

我的用户表中包含用户的所有详细信息,例如用户名,密码等。但是,如果我要添加另一个包含IP的列,则只能存储它(我知道) )是JSON类型的格式(TEXT格式)。所以它会是这样的:

用户名:theuser 密码:密码 等等... 知识产权:{' 27/04/2018 13:05':' 127.0.0.1',' 28/04/2018 16:28':&#39 ; 127.0.0.2',etc}

但是...

1)存储类似的IP是否有效?

2)如果是,那么我如何每次更新日期和IP,以便它不会删除以前的那些?

3)如果不是使用同一个表,我将创建一个新表,比如" users_IPs",然后将用户ID存储在那里,然后将使用相同的TEXT(JSON-像格式)存储IP,会更有效吗?

如果您认为有更好的方式处理此类事情,欢迎您与我分享您的想法。

1 个答案:

答案 0 :(得分:0)

将日志存储为JSON既不高效也不实用。

作为JSON字符串的IP列表将占用更多磁盘空间。同时这样的列表更难搜索 - 在某些时候,您可能希望使用这些日志通过IP搜索用户或显示每日登录数据。如果你需要操作JSON字符串而不是使用适当的模式的单独表,这将更加困难。

这也会减慢更新速度。对于每个新IP,您需要更新整个JSON,因此如果您有100个已保存的IP,并且想要添加新IP,则需要在数据库JSON中保存101条记录。在单独的表中插入单个记录应该更有效(并且更容易修剪旧数据)。

除非:
a)您希望保持这种简单,并且您不希望以这种方式存储大量数据,也不希望经常更新它,
b)您需要经常访问用户日志,select性能比日志更新重要得多,
我建议为登录日志创建一个单独的表,其中每行代表单个登录事件。这是更安全的解决方案 - 更好地扩展,更实用。