如何设计用于存储和检索搜索统计信息的数据库表结构?

Posted

技术标签:

【中文标题】如何设计用于存储和检索搜索统计信息的数据库表结构?【英文标题】:How to design a database table structure for storing and retrieving search statistics? 【发布时间】:2009-02-05 23:19:23 【问题描述】:

我正在开发一个具有自定义搜索功能的网站,我想收集有关用户搜索内容的统计信息。

不是对网站内容进行全文搜索,而是对公司进行搜索,搜索方式如下:

按公司名称 按区号 按提供的服务 ...

如何设计用于存储搜索统计信息的数据库? 哪些信息最相关?我应该如何查询它们?

【问题讨论】:

【参考方案1】:

嗯,这取决于不同搜索模式的工作方式,但通常我会说一个有 3 列的表格可以工作:

SearchType    SearchValue    Count

每当有人进行搜索时,假设他们搜索“公司名称:Initech”,首先查询表中是否存在 SearchType =“公司名称”(或您提供的任何枚举/id 值)的行此搜索类型)和 SearchValue = "Initech"。如果已经有一行,请通过递增 Count 列来更新该行。如果此搜索还没有一行,请插入一个计数为 1 的新行。

通过这样做,您在以后查询它时会有很大的灵活性。您可以找出每种类型最受欢迎的搜索是什么:

... ORDER BY Count DESC WHERE SearchType = 'Some Search Type'

您可以找出最流行的搜索类型:

... GROUP BY SearchType ORDER BY SUM(Count) DESC

等等

【讨论】:

这也是我的设计。我想知道该设计是否有任何类型的 WWGD(谷歌会做什么?)。或者一些巧妙的技巧。【参考方案2】:

这是一个非常笼统的问题,但我会这样做:

选项 1 如果要严格区分所有三种搜索类型,请为每种类型创建一个表。对于公司名称,您可以简单地存储 CompanyID(假设您的网站正在维护公司列表)和搜索计数。对于区号,存储区号和搜索次数。如果区号不存在,请插入。提供的服务主要取决于您的设置。最通用的方法是存储关键字和搜索计数,如果还没有,则再次插入。

您也可以选择存储搜索日期信息。例如,您将有一个包含提供服务关键字和唯一 ID 的表。您将拥有另一个表,该表具有该 ID 的 FK 和 SearchDate。这样一来,您就可以随着时间的推移理解数据,同时最大限度地减少存储空间。

选项 2 对所有搜索一视同仁。一个包含一个关键字列和一个计数列的表,如果需要,可以合并 SearchDate。

【讨论】:

【参考方案3】:

你可能想检查一下:

http://www.microsoft.com/sqlserver/2005/en/us/express-starter-schemas.aspx

【讨论】:

以上是关于如何设计用于存储和检索搜索统计信息的数据库表结构?的主要内容,如果未能解决你的问题,请参考以下文章

Innodb 和 MyIsam 两种存储引擎的文件存储结构

mysql设计表结构数据类型的选择

设计数据密集型应用 第三章:存储与检索

哈希表原理及简单设计

HBase 数据库检索性能优化策略

如何为 POS 系统设计出色的数据库结构