Azure搜索可以用作某些数据的主数据库吗?

时间:2016-10-18 06:37:00

标签: database azure-search bigdata

Microsoft将Azure搜索推广为“云搜索”,但并不一定表示它是“数据库”或“数据存储”。它没有说它是大数据。

是否应该将azure搜索用作某些数据的主数据库?或者是否应该总是有一些“主要”数据存储区在天蓝色搜索中被“复制”以用于搜索目的?

如果是这样,在什么情况/什么情况下将Azure Search用作主数据库是有意义的?

1 个答案:

答案 0 :(得分:17)

虽然我们通常不推荐它,但您可以考虑在以下情况下将Azure Search用作主要商店:

  1. 您的应用可以容忍某些数据不一致。 Azure搜索最终是一致的。
    • 索引数据时,无法立即查询。
    • 目前,没有机制可以控制索引中同一文档的并发更新。
    • 使用搜索查询读取数据时,分页不基于任何类型的快照,因此您可能会丢失或重复文档。
  2. 您无需读出索引的全部内容。 Azure搜索中的分页依赖于$skip参数,该参数当前上限为最大值100000.对于大于100000个文档的索引,读取所有数据可能非常棘手。您需要选择一些要分区的字段,并且您的读取没有一致性保证。
  3. 如果意外删除,您可以丢失数据。截至撰写本文时,Azure Search不支持备份/恢复。如果您不小心删除了数据,则需要从原始数据源重新编制索引。
  4. 您不需要更改索引定义。目前,修改或删除索引中的字段需要重新索引所有数据(您可以添加新字段而无需重新编制索引)。如果Azure搜索是您的主要商店,您唯一的选择可能是尝试将旧索引中的所有数据读入新索引,这受到上述所有上述一致性限制$skip等等。
  5. 您的应用程序的查询需要与Azure搜索提供的功能相匹配。 Azure搜索支持全文搜索,构面和OData过滤器语言的子集,但它不支持连接之间的连接索引或任意聚合。如果您的应用程序需要与Azure搜索提供的查询功能不同的查询功能,则应考虑使用Azure Cosmos DB等其他NoSQL解决方案。
  6. 您的应用程序可以容忍高写入延迟。由于它是搜索引擎而非通用数据库,因此Azure搜索针对查询性能进行了大量优化(尤其是全文搜索查询)。这是以较慢的写入性能为代价的,因为每次写入都需要大量的工作来索引数据。特别是,通过将索引操作批处理(批处理最多可包含1000个索引操作),您将获得最佳写入吞吐量。将文档一次一个地写入索引将导致吞吐量大大降低。
  7. 请注意,其中许多是我们希望将来为了可管理性和易用性而改进Azure搜索的领域,但我们的目标从未将Azure搜索作为通用NoSQL数据库。