如何提高大表连接的性能?

时间:2013-12-03 18:37:23

标签: join bitmap bigdata vertica

请帮我解决这个大数据问题。

我有一个非常大的表(500G),用于存储从一个网站收集的cookie信息,我尝试为许多其他客户提供服务。对于每个客户,他们都有自己的cookie,所以最后我需要对500G + 300G(client_data)进行查询。

由于某些查询同时使用我的cookie数据和客户端cookie数据,因此我可能需要在表和表之间进行连接,因此性能很差。为了解决这个问题,我将整个800GB数据放入一个巨大的表中。由于没有连接表,性能良好。但是,当我将服务扩展到多个客户端时,它需要太多存储空间。

当前我使用Vertica作为我的数据源,并使用位图来存储我的信息。

任何可以保持我当前表现的建议,但也支持40个客户?我的存储大约是12 TB,当前解决方案中的每个客户端都说1.5T。

我想要的是替换Vertica,可以支持位图操作和快速表连接。或者更好的方式来表示我的数据。

3 个答案:

答案 0 :(得分:1)

  

我的存储空间约为12 TB,当前解决方案中的每个客户端都是1.5T。

如果您要存储40 * 1.5TB的非重复cookie数据,那么使其适合12TB是没有神奇的。

答案 1 :(得分:1)

由于缺乏有关定义等的详细信息,这将是一个不精确的答案。但我会在性能上添加以下内容:

查看您的投影定义。您可能会获得性能提升,具体取决于您在投影的order by子句中放置的内容。

答案 2 :(得分:0)

根据具体情况,您可以采取一些方法。第1点和第3点是最容易处理的:

  1. 您可以正确设置投影,以确保两个表格具有相同的细分:https://my.vertica.com/docs/6.1.x/HTML/index.htm#12549.htm
  2. 您可以设置预加入预测,其中在数据加载期间支付加入费用,而不是在数据检索期间,请参阅https://my.vertica.com/docs/6.1.x/HTML/index.htm#1299.htm
  3. 确保您的数据类型最佳。在int上匹配比在字符串上匹配要快,匹配低基数的列比匹配具有高基数的列更快。
  4. 如果1和3设置得很好,Vertica实际上可以在解压缩之前应用过滤器,将您的查询紧固并因此使用更少的内存。