php - 云架构堆栈意见 - EC2 与 Azure

标签 php .net azure amazon-ec2 cloud-hosting

我读过许多关于 Amazon EC2Microsoft 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) 将EC2MongoDB结合使用,据我所知,它比MySQL更快。同样,这可能取决于查询的类型。
  • (5) Google AppEngine。我不太确定 GAE 如何处理此查询结构,但我想这就是我寻求意见的原因。

我想找到最佳的堆栈组合来优化我的特定需求(如上面的伪 SQL 查询所概述)。

有人有这方面的经验吗? 哪个堆栈选项会产生在 WHERE 子句中包含许多数学运算符的最快查询?

干杯, 布雷特

最佳答案

具有动态系数(权重)的查询类型将需要在每次查询时扫描整个表。 SQL 数据库引擎不会在这里为您提供帮助,因为查询优化器实际上无能为力。

换句话说,您需要的不是 SQL 数据库,而是真正的“NoSQL”数据库,它真正以尽可能最快的速度优化表/行访问。因此,您确实不必尝试 SQL Azure 和 MySQL 来找出这部分答案。

此外,查询类型中的每一行彼此完全独立,因此它适合简单的并行性。您选择的平台应为您提供以下功能:

  1. 以最快的速度进行表/行扫描
  2. 能够高度并行化您的操作

您提到的每个平台都使您能够存储大量 blob 或类似表格的数据,以实现非常快速的扫描检索(例如 Azure 中的表存储)。每个实例还使您能够“启动”多个实例以并行处理它们。这实际上取决于您最熟悉的编程环境(例如 Google/Amazon 中的 Java,Azure 中的 .NET)。本质上他们都做同样的事情。

我个人推荐使用 Azure,因为您可以:

  1. 将大量数据存储在“表存储”中,针对快速扫描检索进行优化,并进行分区(例如超过 d0 范围)以实现最佳并行性
  2. 动态“启动”任意数量的计算实例以并行处理数据
  3. 同步结果排序的排队机制

Azure 以一种非常“简洁”的方式满足您的需求 - 为您提供足够的基础设施来完成您的工作,仅此而已。

关于php - 云架构堆栈意见 - EC2 与 Azure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835660/

相关文章:

c# - RavenDB 的 ID POCO 属性是否必须区分大小写?

c# - 自定义指标遥测不会出现在 Application Insights 的指标浏览器中

php - SQL-Server 'uniqueidentifier' 列类型到 MySQL 的迁移问题

php - mysql_select_db 返回 false,而 mysql_error 什么也不返回

php - 删除文件名中除文件扩展名前的点之外的所有点

php - 将 id 从一个表格带到另一个表格并插入另一个表格

.net - 如何将 Visual Studio 附加到尚未启动的进程?

c# - 带有 Log4Net 的控制台应用程序在 Debug 模式下编译,但在 Release 模式下不编译

azure - 将多个 for_each 值连接到单个列表中

通过 FTP App_Offline 到非 Azure 站点的 Azure DevOps Pipeline