我读过许多关于 Amazon EC2 与 Microsoft Azure(以及Google App Engine)优缺点的博客和文章。不过,我正在尝试决定哪一个更适合我的具体情况。
我有一个数据集 - 可以将其视为格式的标准表:
[id] [name] [d0] [d1] [d2] .. [d63]
---------------------------------------
0 Name1 0.43 -0.22 0.11 -0.81
1 Name2 0.23 0.65 0.62 0.41
2 Name3 -0.13 -0.23 0.17 0.00
...
N NameN 0.43 -0.23 0.12 0.01
我最终想做的事情(尽管我最终选择了堆栈)将等同于类似于以下内容的 SQL SELECT
语句:
SELECT name FROM [table] WHERE (d0*QueryParameter1) + (d1*QueryParameter1) +(d2*QueryParameter2) + ... + (dN*QueryParameterN) < 0.5
其中QueryParameter1,2,N
是运行时提供的参数,并且每次运行查询时都会更改(因此不可能进行缓存)。
我主要关心的是查询速度,因此我想了解哪个云堆栈选项可以提供最快的查询结果。
我可以通过多种方式做到这一点:
- (1) 使用SQL Azure,就像上面的查询一样。我已经尝试过这种方法,并且查询可能会像预期的那样非常慢,因为 SQL 只提供单个实例。我可以启动多个 SQL 实例并对数据进行分片,但这很快就会变得非常昂贵。
- (2) 使用Azure 存储表。博主声称存储表总体上更快,但是对于我的查询要求来说仍然是这样吗?
- (3) 使用 EC2 并使用 MySQL 启动多个实例,可能会将分片合并到新实例中(但成本会增加)。
- (4) 将EC2与MongoDB结合使用,据我所知,它比
MySQL
更快。同样,这可能取决于查询的类型。 - (5) Google AppEngine。我不太确定 GAE 如何处理此查询结构,但我想这就是我寻求意见的原因。
我想找到最佳的堆栈组合来优化我的特定需求(如上面的伪 SQL
查询所概述)。
有人有这方面的经验吗? 哪个堆栈选项会产生在 WHERE
子句中包含许多数学运算符的最快查询?
干杯, 布雷特
最佳答案
具有动态系数(权重)的查询类型将需要在每次查询时扫描整个表。 SQL 数据库引擎不会在这里为您提供帮助,因为查询优化器实际上无能为力。
换句话说,您需要的不是 SQL 数据库,而是真正的“NoSQL”数据库,它真正以尽可能最快的速度优化表/行访问。因此,您确实不必尝试 SQL Azure 和 MySQL 来找出这部分答案。
此外,查询类型中的每一行彼此完全独立,因此它适合简单的并行性。您选择的平台应为您提供以下功能:
- 以最快的速度进行表/行扫描
- 能够高度并行化您的操作
您提到的每个平台都使您能够存储大量 blob 或类似表格的数据,以实现非常快速的扫描检索(例如 Azure 中的表存储)。每个实例还使您能够“启动”多个实例以并行处理它们。这实际上取决于您最熟悉的编程环境(例如 Google/Amazon 中的 Java,Azure 中的 .NET)。本质上他们都做同样的事情。
我个人推荐使用 Azure,因为您可以:
- 将大量数据存储在“表存储”中,针对快速扫描检索进行优化,并进行分区(例如超过 d0 范围)以实现最佳并行性
- 动态“启动”任意数量的计算实例以并行处理数据
- 同步结果排序的排队机制
Azure 以一种非常“简洁”的方式满足您的需求 - 为您提供足够的基础设施来完成您的工作,仅此而已。
关于php - 云架构堆栈意见 - EC2 与 Azure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835660/