服务器设置是否托管Google Analytics等工具?

时间:2012-10-22 08:43:58

标签: database database-design architecture web-statistics

我正在开发类似于Google Analytics的Google Analytics工具。这将在数​​据库中存储关键字,访问次数和页面。

因此,数据库可以快速增长,因为我希望有很多人使用它。

我应该如何设置数据库?所有帐户和所有受监控网站的一个数据库?或者为每个帐户建立一个数据库会更好吗?

另外,我计划从一台专用服务器开始,但我确信将来我需要多台服务器,因此我必须牢记这一点。

我也知道如果我为每个帐户创建多个数据库,那么当应用程序的架构发生变化时,我将不得不在所有帐户上运行升级脚本。

2 个答案:

答案 0 :(得分:1)

您打算使用哪种数据库?关系(PostgreSQL,MySQL)和“NoSQL”(MongoDB,CouchDB)之间有一个很大的区别

我只会在关系方面讨论PostgreSQL,因为它是我遇到的唯一数据库。

首先,我会将所有内容保存在一个数据库中。每个帐户使用数据库没有任何好处。

其次,你应该绝对相信你会超过一台机器。鉴于应用程序的类型,您将处理比读取更多的写入,因此主从复制仅用于高可用性,并且使用PostgreSQL进行多主复制并不容易。

从我上一次的研究中,最难以实现的方法是使用像Postgres-XC这样的工具,它被设计为可写入的,但我不知道它是如何准备生产的。

另一种解决方案是使用Bucardo或SkyTools等工具。没有使用SkyTools的经验,但去年Bucardo上班时遇到了很多麻烦。

最后一个解决方案是sharding。阴影的天真方式是做类似的事情 shard number = id % 10。但是,无论何时添加/删除分片,都需要重新平衡群集。 这需要您编写应用程序“可识别碎片”,以便将查询定向到正确的分片。

无论如何,就像我之前说过的那样,确保你首先需要进行分片/聚类。

现在对于“NoSQL”方面,我没有任何解决方案的经验,但我知道MongoDB和CouchDB自己处理分片,因此使用这些解决方案更容易,但是你放弃了很多。

答案 1 :(得分:1)

我会稍微谈谈文森特的答案。

至于分片,我们有PL/Proxy的良好经验。通过分片,您可以在没有问题(读取或写入)的情况下超越单台机器。

至于复制来自Skytools的Londiste非常容易设置和使用。有了它,你就可以获得PgQ,这是一个非常好的Postgres消息传递解决方案。