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

ric*_*ard 13 database bigdata azure-cognitive-search

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

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

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

Bru*_*ton 19

虽然我们通常不推荐它,但您可以考虑在以下情况下将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个索引操作),您将获得最佳写入吞吐量.将文档一次一个地写入索引将导致吞吐量大大降低.

请注意,其中许多是我们希望将来为了可管理性和易用性而改进Azure搜索的领域,但我们的目标从未使Azure搜索成为通用的NoSQL数据库.

  • 根据您的搜索场景,您可能会发现 Cosmos 是更好的主要商店,它还可以快速完成大部分搜索(2 合 1)。大约一年前,我们在 Azure 搜索中成功构建了一个中等复杂的搜索场景(80 多个字段、10 个方面、5 个文本字段),MS 架构师鼓励我们改用 Cosmos。我们对两者进行了基准测试,性能非常相似,Cosmos 提供了对一致性和冗余的更好控制。 (2认同)