【问题标题】:How would I design this database?我将如何设计这个数据库?
【发布时间】:2013-07-09 21:09:21
【问题描述】:

每天我都想跟踪我的数据库中某个对象获得了多少“点击”(int)。

现在对象中称为 clicks 的 int 显然无济于事,因为我无法跟踪点击的日期。

存储每日点击次数最明智的方式是什么?

【问题讨论】:

    标签: database performance entity-framework database-design


    【解决方案1】:

    VisitedDate 列保留在您的跟踪表中。

    RecordID INT Identity
    ItemID INT
    VisitedDate DateTime
    IPAddress varchar(30)
    

    获得记录后,您可以查询并获取特定日期/月份的访问结果等...

    【讨论】:

    • 我明白了。所以我应该在 VisitedDate 中为每个访问者创建一个新行?我对性能了解不多,但我说我每天都会有成千上万的访问者访问数百个对象。这在性能方面不是很重吗?
    • 采用这种方法可以让您了解每次访问。(IP 是什么(访问者来自哪个位置)等。)您需要避免添加当天的重复记录。跨度>
    • 您可以跳过 RecordID 列,然后您可以在特定时间段(一年?)后定期清除该表中的数据,以保持它不是 BIG
    【解决方案2】:

    按照 Shyju 的建议创建一个表(IP 地址是可选的),是的,它会快速增长,但如果出现问题,您可以将数据汇总到每周(或每月,或每年)汇总表,其中存储总数对于那个项目,那个时间段。

    最好始终将数据初始存储在此最低级别,并根据需要汇总/归档到汇总表,因为如果您最初将数据存储在汇总级别,您将永远丢失该详细信息 - 跟踪详细程度使您的所有选项保持开放。

    如果您需要,可以使用一些变通方法来提高性能,没有任何变通方法可以重新创建您从未存储过的数据。

    【讨论】:

    • 好吧,我明白了 :) 自从他首先提出建议以来,我已将 Shyju 评为最佳答案,但我也感谢您的回答!
    【解决方案3】:

    我随时在点击表上插入或更新。

    Clicks
    
    (Product_id | Vendor_id | User_id)[unique] | Clicks | Created_at
    

    如果 (Product_id | Vendor_id | User_id) 组合不存在,则插入。更新(+1 点击),如果该组合已经存在。

    我不会担心现在的表现,在早期阶段。

    如果你还在担心,

    Use a javascript request and write the (Product_id | Vendor_id | User_id)[unique] | Clicks | Created_at into a textfile, onclick.
    

    在 EOD 中,将文件中的信息加载到 clicks 表中。

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多