当前位置: 首页 > 知识库问答 >
问题:

中型数据的BigQuery替代方案

狄承望
2023-03-14

这是为什么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内返回。

共有3个答案

徐兴昌
2023-03-14

我知道SQL Server,所以我的答案是有偏见的。

>

  • 10M行应该很容易放入内存,因此任何类型的聚合都应该很快,特别是如果您有一个覆盖索引的话。如果没有,服务器配置可能需要调整。另外,SQLServer有所谓的内存表,这可能非常适合这里。

    SQL服务器有一个名为索引视图的功能。聚合查询是索引视图的经典用例。索引视图本质上是存储在磁盘上的数据的副本,并由服务器随着表中的基础数据的变化而自动维护。它减慢了INSERTS、DELETES和UPDATES的速度,但使SELECT变得快速,因为摘要总是预先计算好的。请参阅:索引视图可以(和不能)做什么。其他DBMSe应该具有类似的功能。

  • 赵越
    2023-03-14

    这里有一些可供选择的数据来考虑这种大小的数据:

    • 单红移小型SSD节点
      • 没有设置。在不到1秒的时间内轻松返回这么多数据的答案。
      • 博士后喜欢。与红移的性能类似。不支付您不需要的存储费用。从他们的单节点“沙盒”AMI开始
      • 类似MySQL的。以前被称为InfiniDB。非常好的表现。由MariaDB(公司)支持。
      • Drill与BiqQuery有非常相似的哲学,但可以用于任何地方(它只是一个罐子)。此大小的数据的查询速度很快。

      如果低管理员/快速启动至关重要,请使用红移。如果金钱/灵活性至关重要,请从Drill开始。如果你喜欢MySQL开始与MariaDB列存储。

    马欣德
    2023-03-14

    2020年更新:查看BigQuery BI Engine,它是仪表板查询的内置加速器:

    • https://cloud.google.com/bi-engine/docs/overview

    如果你需要在不到一秒钟内得到答案,你需要考虑索引。

    典型故事:

    1. MySQL(或此处提出的任何其他数据库)速度很快,直到
    2. 有一天,一些聚合查询开始运行缓慢。分钟、小时、天等
    3. 步骤2的典型解决方案是索引和预聚合。如果你想在不到一秒钟内回答某类问题,你需要投入时间和优化周期来回答这类问题
    4. BigQuery的妙处在于您可以跳过步骤3。将这些分钟/小时/天缩短到几秒,只需最少的投资—任何时间,任何查询

    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)的方法,非常好。但是我非常想念这个神奇的