我正在考虑建立一个系统,用于保存位于不同域中的单独网页的访问者统计信息。由于性能问题,这些页面可能会被缓存,尽管它是用php创建的,并且有mysql / isam数据库。
我正在考虑为所有页面包含一个jquery代码。这是伪代码:
function(request, response)
{
$.ajax({ url: "http://www.mywebstats.com/post>",
data: { page: <? echo $current_url; ?>, ip: <? echo $user_ip; ?>, session: <? echo $user_session; ?> },
dataType: "json",
type: "POST",
success: function(data){
response(data);
}
用于显示这些网页访问的类似但相反的功能。
我想,我解释了我想做的事情。问题是:
1-这种方法的性能提升是否值得? 2-我应该使用什么样的数据库存储引擎?
答案 0 :(得分:1)
假设你是zany并且谷歌分析不能满足你的需求 -
您可以为http://www.mywebstats.com构建一个简单的API,并且每5分钟运行一次cron以推送到接收脚本。这样你就不会在每次加载页面时都进行调用。
您的本地脚本将完全按照您上面的操作执行,但不能访问外部位置。您的本地脚本将用户数据转储到队列中,该队列可以按令牌,会话信息或任何数据进行分组,以跟踪其浏览路径,行为等。当调用cron时,它会获取最后100条记录并将其发送到您的API。
这对任何以前使用过cron的人都有意义。
至于数据存储。这取决于您将如何与数据进行交互。 Myisam听起来像是能满足您的需求。 InnoDB在这一点上只是你的选择。如果你使用某种ORM来检索记录,那么你可能需要走这条路。 Myisam用于全文匹配,如果您觉得需要对统计数据运行手动搜索查询。这取决于你的计划。 即使您将数据公开并且可能面临报告数百万条通话记录,您仍然可以优化输出,以便在收到用户被提供缓存报告时进行编译,以简化和轻松处理。
简而言之 - 在本地收集数据并使用cron将其推送到您的统计网站。 Myisam很适合这个样子。我的意见是。
<强>更新强>
至于您的问题 - Google Analytics有一个可用于获取数据的API: http://code.google.com/apis/analytics/docs/gdata/home.html
我从未与它进行过互动,但很可能它有你想要的东西。
至于单独的数据库交互 - 不一定。您可以为任意数量的网站提供一个数据库,但这并不是很有意义。我提到了看起来像2个独立数据库的内容,因为你的问题看起来像是在调用一个单独的网站,只打算做两件事 - 记录统计数据和提供统计数据。为此,我肯定会说你应该将它分成2个数据库。特别是如果有多个站点调用API。
您的点击计数器也可以轻松记录在cron上。您将在统计站点上有一个单独的cron作业,用于计算最近更新的页面并更新与关联页面关联存储的简单json字符串。这样你的要求很轻。如果你想避免另一个cron作业,那么你可以在那里随时调用计数器 - 或者 - 你可以运行一个额外的cron来获取最新的页面计数器结果并将它们存储在本地或者将它们写入平面文本以进一步缓存。
要记住的是cron一词并不是一件可怕的事。如果您的主机允许您进行设置,则它们非常便于基本维护和性能改进...假设您正确执行它们。它们仍然需要以逻辑方式构建,因此您最终不会编写运行5分钟或超时的脚本。但这是另一个故事。希望你知道你做了什么,知道我的意思。