这是为什么BigQuery在小数据集上表现不好的问题的后续问题。
假设我有一个大约1百万行的数据集。在我们当前使用的数据库(mysql)中,聚合查询的运行速度非常慢,可能需要大约10秒的时间进行复杂的聚合。在BigQuery上,所需的初始化时间可能会使此查询花费约3秒,比mysql要好,但如果我们需要在1s或更短时间内返回查询,则此工具不适合此作业。
那么,我的问题是,在对中等大小的数据集(如10M行)进行聚合查询时,使用BigQuery有什么好的替代方案?一个示例查询可能是:
SELECT studio, territory, count(*)
FROM mytable
GROUP BY studio, territory
ORDER BY count(*) DESC
我想到的可能的解决方案是ElasticSearch(https://github.com/NLPchina/elasticsearch-sql)和红移(postgres太慢)。这里有什么好的选项可以通过SQL查询?
注意:我不是在寻找为什么或者如何使用BQ,我在寻找一种替代方法,用于10M行以下的数据集,其中查询可以在1s内返回。
我知道SQL Server,所以我的答案是有偏见的。
>
10M行应该很容易放入内存,因此任何类型的聚合都应该很快,特别是如果您有一个覆盖索引的话。如果没有,服务器配置可能需要调整。另外,SQLServer有所谓的内存表,这可能非常适合这里。
SQL服务器有一个名为索引视图的功能。聚合查询是索引视图的经典用例。索引视图本质上是存储在磁盘上的数据的副本,并由服务器随着表中的基础数据的变化而自动维护。它减慢了INSERTS、DELETES和UPDATES的速度,但使SELECT变得快速,因为摘要总是预先计算好的。请参阅:索引视图可以(和不能)做什么。其他DBMSe应该具有类似的功能。
这里有一些可供选择的数据来考虑这种大小的数据:
如果低管理员/快速启动至关重要,请使用红移。如果金钱/灵活性至关重要,请从Drill开始。如果你喜欢MySQL开始与MariaDB列存储。
2020年更新:查看BigQuery BI Engine,它是仪表板查询的内置加速器:
如果你需要在不到一秒钟内得到答案,你需要考虑索引。
典型故事:
BigQuery非常棒,因为它提供了4。但你要求的是3,MySQL也可以,Elasticsearch也可以,任何索引数据库都会在不到一秒钟的时间内为你带来结果——只要你为某些类型的问题投入时间优化你的系统。然后,要在不花费任何优化时间的情况下获得任意问题的答案,请使用BigQuery。
BigQuery:将在几秒钟内回答任意问题,无需准备。
MySQL和替代品:将在不到一秒钟的时间内回答某些类型的问题,但需要开发时间才能实现。
我有一个要求,我在BigQuery(每小时分区)中有一个分区表,我必须编写一个批处理作业,一次处理一个分区。 在hive中,很容易做到这一点,就像我可以在主表和一个元数据表中显示分区一样,我可以在其中维护已处理的分区,然后使用Exception在两个数据集之间创建差异,以标识要处理的剩余分区。 在BigQuery中,我可以做一些类似于在主表上显示分区的事情,并维护一个元数据表,在该表中我可以维护已
我陷入了关于是否使用MongoDB或Cassandra来满足我的数据库需求的具体决定之间,并希望对我的用例进行输入以指导我的决定。 要求: 数据源 X个包含Y个服务器的数据中心。 每个服务器有N个网络和M个统计数据。 e、 g.目前(3个数据中心、50台服务器、19个网络和10个统计数据)。这些数字会随着时间的推移而增加。 数据获取: 每小时为每台服务器解析一个xml页面(约20kb/页)。(~2
我有两个Spark数据帧,每个数据帧有5.39亿行和4列。A和B列是字符串,C、D、E和F列是浮点数 我想加入DF1(5.39亿行)和DF2(5.39万行)。我在50节点集群和8GB执行器内存上尝试了DF1.join(DF2,“fullouter”)。它会自动终止集群,并显示内存不足错误消息。 是否有替代方法与rdds连接,或者比df.join()内存效率高的数据集?
我一直在通过Netbeans使用CodeNameOne设计一个应用程序,并遇到了一些问题,特别是“找不到符号”编译错误。经过进一步的研究,我发现这是由于CNO不支持某些库/杂项。 我想知道是否有其他方法可以使用以下库/执行任务: (从文件读取)导入java.io.file;符号:类文件位置:package java.io (抛出FileNotFoundException)导入java.io.Fil
这可以用来强制假设所收集的元素是不同的 但是,在我看来,java doc已经过时了。不能用了。问题是JDK是否为java开发人员提供了对类似功能的访问(类似的方法、常量等),还是应该由开发人员自己编写?
在这里学习我在Raku(neéPerl 6)的方法,非常好。但是我非常想念这个神奇的