我已经使用MySQL和PHP实现了报告。 但是现在由于数据太多,查询需要太长时间,页面无法加载。 在阅读一些内容后,我遇到了一些术语,例如Nosql、MongoDB、Cassandra、OLAP、Hadoop等,但我不确定该选择哪个。 是否有一种机制可以将我的数据从MySQL转移到Nosql,并可以在其上运行报告查询并为客户提供服务,同时保留我的MySQL数据库?
http://dev.mysql.com/doc/refman/5.5/en/replication-howto.html
他们随后使用从服务器来运行报告查询。从服务器通常比主服务器慢几秒钟或几分钟(也就是说,它们略微过时)。但这通常足以给用户一种实时报告的错觉。我会提供一个链接供您阅读,其中实际上提供了某些用例: http://www.mongodb.com/use-cases/real-time-analytics 但是我将为更传统的MongoDB设置发言。
我已经使用过MySQL和MongoDB进行分析目的,我发现MongoDB更适合,如果不需要一点点黑客技巧来使其正常工作。
当涉及到检索分析数据时,MongoDB的好处在于它不需要IO /内存每次写出单独的结果集。这使得对副本集的单个成员进行读取非常可扩展,因为您只需将分析集合添加到工作集(即内存)中,并使用批处理响应直接从中提供服务(这是驱动程序的默认实现)。
因此,对于MongoDB而言,复制很少在读/写方面具有优势,实际上在MySQL中我也发现它并没有优势。如果确实如此,那么您正在执行无法扩展的错误查询; 在这种情况下,您将在数据库服务器上安装memcache,然后,看,您正在以NoSQL方式从内存中提供过期数据...嗨呀,我猜。
好的,我们已经确定了一些基本想法; 现在是时候谈论那个黑客了。为了从MongoDB获取最佳速度,并且由于它没有JOINs,您需要扁平化数据,以便您的一侧甚至不需要任何结果集。
有许多策略可以实现这一点,但我要在这里提到的是:http://docs.mongodb.org/ecosystem/use-cases/pre-aggregated-reports/ 预聚合报告。由于它本质上与逻辑上拆分表以使查询更快,更轻松地运行在大型表上的方式相同,因此此方法在SQL技术中也很有效。
您需要做的是将您的分析数据拆分为每天或每月(或两者),然后以非规范化的方式跨越这些范围聚合您的数据,基本上是一行。
之后,您可以直接从集合中显示报告,而无需任何结果集,从而进行一些非常快速的查询。
稍后,您可以添加一个映射减少步骤来创建更好的分析,但迄今为止我还没有需要完成完整的基于视频的分析。
这应该让您开始了解。
nosql
数据库报告速度比原来的mysql
快多少呢?看起来不太可能会快那么多。 - jeroen