c# - 将基于 SQL 的应用程序转换为 Redis

标签 c# .net sql nosql redis

我有一个基于 MS SQL 的应用程序,其主要目标是搜索公司表。 这张公司表有几个可以搜索的列。像公司名称、地址、邮政编码、纬度、经度。

现在,由于对速度的需求,我正在考虑将其转换为基于 Redis 数据库的应用程序。任何人都可以帮助我采取哪种方法来正确地做到这一点?我应该如何设置我的 Redis 数据库?我应该如何查询它以找到公司名称中包含 tech 且位于 lat x-0.5 和 lat x+0.5 以及 long y-0.5 和 long y+0.5 之间的所有公司?

或者 Redis 可能不是用于此类或搜索的最佳 NOSQL 数据库?也欢迎其他建议。

最佳答案

Redis 是一种键/值存储,当您知道确切的键时速度非常快,但它在搜索多个键以查找特定值或值范围时非常糟糕。所以我不建议你使用 Redis。

当您想通过 GPS 坐标搜索时,MongoDB将是一个选项,因为 it has a rich API especially for geospatial searching .

当您需要快速且功能丰富的全文搜索时,您应该看看 Lucene ,它本身不是数据库,而是与其他数据库集成的工具。

顺便说一句:“NoSQL 是快速的”这句口头禅过于简单化了。诚然,特定的数据库在特定的前提下可以比任何关系型数据库都快很多,但也有相反的情况。

您真的确定您已经使用了所有可能的方法来提高您的 MSSQL 数据库的性能吗?

  • 您进行的每次搜索都使用适当的索引吗?
  • 所有的 JOIN 都是在明确的辅助键上进行的吗?
  • 您的数据库是否已正确规范化?
  • 您能否通过重构数据库设计来避免一些代价高昂的操作,即使这意味着您需要打破规范化?

关于c# - 将基于 SQL 的应用程序转换为 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18621785/

相关文章:

c# - 在 Silverlight 中使用 C# 以编程方式绘制

.net - DataContractJsonSerializer.ReadObject(流流): Can I read more than one object?

.net - 在 Fluent Nhibernate 中配置 "no-proxy"

.net - 如何集成/混合托管和非托管代码

c# - 如何按 Controller 名称对 NSwag swagger.json 中的路径进行排序/排序

c# - 将类型作为属性参数传递

php - 如何使用 PHP/SQL 并行运行两个 sql 查询?

sql:为注入(inject)制作表结构

java - JAVA中SQL语句的where子句中使用变量

c# - Rowid中的SQLITE问题