2012-10-22 57 views
0

我正在开发类似于Google Analytics的Google Analytics工具。这将在数​​据库中存储关键字,访问和页面。服务器设置用于托管Google Analytics等工具?

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

我该如何设置数据库?一个数据库用于所有帐户和所有正在监控的网站?或者每个账户都有一个数据库会更好?另外,我打算从一台专用服务器开始,但我确信将来我需要多台服务器,所以我必须牢记这一点。

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

回答

1

你打算使用什么样的数据库?关系型(PostgreSQL,MySQL)和“NoSQL”(MongoDB,CouchDB)之间有很大的区别

我只会在关系端讨论PostgreSQL,因为它是我唯一有经验的数据库。

首先,我会把所有东西放在一个数据库中。每个帐户使用数据库没有好处。

其次,你应该绝对确定你会超出一台机器。考虑到这种应用程序,你将处理的写操作多于读取,所以主从复制只能用于高可用性,而使用PostgreSQL进行多主复制并不容易。

从我上次的研究中,最不痛不痒的方法是使用像Postgres-XC这样的工具,它的设计是可以书写的,但我不知道它是如何生产的。

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

最后的解决办法是做sharding。天真的分片方式是做类似 shard number = id % 10。但是,使用这种方法时,无论何时添加/删除分片,都需要重新平衡集群。 这将需要你编写你的应用程序“分片感知”,以便将查询指向正确的分片。

无论如何,正如我之前所说的,确保您将首先需要碎片/簇化。现在对于“NoSQL”方面,我没有任何解决方案的经验,但我确实知道MongoDB和CouchDB处理分片自己,因此使用这些解决方案更容易,但是您放弃了很多。

1

我会对文森特的答案展开一点。

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

至于复制Londiste从Skytools是非常容易设置和使用。通过它,你可以得到PgQ,这是Postgres非常好的消息解决方案。

相关问题