【问题标题】:Implement search in Azure SQL在 Azure SQL 中实现搜索
【发布时间】:2012-02-26 05:52:58
【问题描述】:

我正在将 .NET 应用程序迁移到 Azure,因为存储的数据量越来越大,并发用户也在增加。为了能够搜索,我需要一个强大的解决方案来搜索可扩展的 SQL。

我需要在搜索时返回匹配的订单(在一个字段中,谷歌风格)。数据存储在这些相关表的几列中:订单、客户和地址。

我读到 Azure 中不提供全文搜索,所以我查看了 Lucene,但有点担心将索引存储在 blob 中。每次搜索都访问 blob 存储似乎不太合适。

有人对如何以稳健的方式完成此任务有任何建议吗?

【问题讨论】:

    标签: search azure full-text-search azure-sql-database


    【解决方案1】:

    Azure 还推出了一个运行良好的search as service api。

    我让它在处理大数据时表现得非常好。

    【讨论】:

    【解决方案2】:

    我们使用 Solr/Lucene 来获得最佳全文搜索结果。索引数据存储在local storage(最大 2 TB)中。

    本地存储类似于c:磁盘驱动器,但您必须在定义文件中声明它并通过调用RoleEnvironment.GetLocalResource获取它的引用。

    如果您想加快启动时间(初始完整索引),您可以将索引数据保存/下载到持久 Blob 存储。

    另一种选择是使用Azure Drive,但请记住,只有一个实例可以写入。

    【讨论】:

    • Azure 驱动器仍然是 Blob 存储,但您可以选择将数据缓存到本地实例存储。在 Lucene 场景中,此选项将避免产生交易成本和搜索性能损失。写入(在您的情况下为 Lucene 索引更新)仍然针对后备 blob 存储完成,因此它们是持久的。
    【解决方案3】:

    一种解决方案是建立一个“关键”表。

    有一列包含您要查找的搜索字符串,另一列是返回您的订单表的键。

    您需要在订单、客户和地址表的 CRUD 函数上创建适当的触发器。

    通过将所有三个可搜索字段扁平化到一个键表中,您可以非常快速地进行索引搜索,以最小的空间折衷。

    需要注意的是,SQL Azure 中的查询是单线程的,所以表扫描会很难看。

    示例:像 'abc%' 这样的键将使用索引 示例 2:其中 '%abc% 之类的键将执行表扫描,并且在大型集合上会很慢。

    我使用这些类型的技术在 200 毫秒内维护了一个 11,000,000 行目录表并在 sql azure 上每天处理 300 万次页面浏览。

    【讨论】:

      猜你喜欢
      • 2019-07-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多