【问题标题】:Sql Server In-memory table implemented with Redis使用 Redis 实现的 Sql Server In-memory 表
【发布时间】:2017-01-03 03:10:48
【问题描述】:

从 Sql Server 2014 开始,微软实现了 In-Memory OLTP,IMO 是一个非常有趣的功能! 我从未尝试过,但我很感兴趣,因为它确实可以加快我的“阅读”操作(我的意思是选择查询)。

我的想法是直接对磁盘(不在内存中)运行“写入”操作(插入、更新、删除),以确保数据被持久写入。 相反,“READ”操作(特别是对大表的查询、Application_Startup 处的计数器、ecc)将在内存中完成。

现在我有一些问题: 1) 内存表是否以某种方式与磁盘中保存的数据同步?

2) 可以实现我上面写的还是我误解了?

3) 因为Sql Server 2016的企业版对于初创公司或小公司来说成本太高,是否可以使用Redis来实现这一切? 我也是 Redis 的新手,我不确定它是否具有“内存中”表功能。 在谷歌上搜索我发现它做了一个缓存(不清楚是什么,查询?)它是一个内存数据结构存储(键值对)

提前谢谢大家

【问题讨论】:

    标签: sql-server performance caching redis in-memory


    【解决方案1】:

    回答你的第一个和第二个问题:

    SQL Server 2016 中的内存可以通过两种方式创建,一种是仅使用架构 - 这意味着数据是易失性的并且它只保留在内存中

    CREATE TABLE TestInMem (
    i int,...<columns>
    )
    WITH (MEMORY_OPTIMIZED = ON,
              DURABILITY = SCHEMA_ONLY);
    

    另一种方式是架构和数据 - 在这里,两者都将定期持久化到辅助存储中,您的操作会更快,因为您将直接访问主内存来访问数据。

    CREATE TABLE TestInMem (
    i int,...<columns>
    )WITH (MEMORY_OPTIMIZED = ON,
              DURABILITY = SCHEMA_AND_DATA);
    

    https://msdn.microsoft.com/en-us/library/dn133186.aspx

    【讨论】:

    • 好的,例如:考虑我保存“POST”对象的表......在第二种方式“SCHEMA_AND_DATA”中,我能够决定必须完成所有“写入”操作直接写入磁盘,所有“读取”操作都必须在内存上完成?
    • 还有其他 DMV 可以跟踪。我们可以检查 sys.dm_xtp_system_memory_consumers 等,但不确定我是否正确理解了您的问题..
    • 我的问题是:当我向表中插入新行(使用“DURABILITY = SCHEMA_AND_DATA”创建)时,数据被写入内存,然后与物理存储同步或直接添加到磁盘然后Sql Server将它与内存同步?只是为了了解它是如何工作的
    【解决方案2】:

    关于第三个问题:

    你不能直接在redis中强加sql查询。 Redis 不是这样工作的。相反,它具有集合、排序集合、哈希映射等结构,您可以使用它们并尝试实现等效查询,但绝对不是简单的方法,也永远无法实现 sql 提供的所有功能。例如复杂的 join、group by、order by 可能需要超过 5 或 6 次 redis 操作,前提是您将它​​们完美存储并选择最佳检索方式。

    【讨论】:

    • 是的,我想……因为它是一个 noSql……我读过一些关于 Redis 的东西,它不像内存中的 sql server 那样工作……我在 Google 上搜索了一些关于如何在 Redis 中实现计数器(例如用户计数器、邮政计数器、ecc),将其与我的 web api \ sql server 数据集成,但我没有发现任何帮助......这是一项复杂的工作还是可以快速实现?我必须决定使用哪种技术来实现实时计数器并加快查询速度,这不是一个简单的决定
    • redis 适用于增量类型的东西。简单地说,如果你有一个小于或等于 2 列的表,在 redis 中实现它们非常简单,当列超过 2 时它变成complex 用于存储和维护复杂查询。
    猜你喜欢
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2023-03-26
    • 2011-10-03
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多