我目前正在尝试提高 Web 应用程序的性能。该应用程序的目标是提供(real time) analytics
. 我们有一个类似于star schema
少量事实表和多维表的数据库模型。数据库Mysql
与MyIsam
引擎一起运行。
Fact 表的大小很容易达到上百万,一些维度表也可以达到上百万。
现在的重点是,如果维度表在事实表上连接并且聚合完成,则选择查询会变得非常慢。听到这个时首先想到的是,为什么不预先计算数据呢?这是不可能的,因为允许用户使用几个可自由定制的过滤器。
所以我需要的是一个适合各种用途的一体化系统;)遗憾的是,它还没有被发明出来。所以我想到了结合两个现有系统的想法。混合 arow oriented
和column oriented
数据库(例如 likeinfinidb
或infobright
)。保留 mysql MyIsam 解决方案(用于快速插入和基于行的查询)并向其添加面向列的数据库(用于在少数列上进行快速聚合操作)并通过 cronjob 定期(每晚)填充它。问题是当查询当前数据(它必须是实时的)时,因此我可能需要从两个数据库中获取数据,这会使事情变得复杂。
使用 infinidb 进行的第一次测试显示在聚合几列时性能非常好,所以我真的认为这可以帮助我加快应用程序的速度。
所以问题是,这是个好主意吗?有人可能已经这样做了吗?也许有更好的方法来做到这一点。
我还没有面向列的数据库的经验,我也不确定它的架构应该是什么样子。第一次测试显示在相同star schema like
结构上的良好性能,而且在结构上也表现出良好的性能big table like
。
我希望这个问题适合SO。