在Sqlite中,有一个选项可以创建in-memory database,另一个选项可以创建not wait for things to be written to the filesystem和put the journal in memory or disable it。 SQL Server有这样的设置吗?
我的用例是存储数据,在正常使用中应该持续大约一天,但如果丢失则不会有什么大不了的。我会使用像memcached这样的东西,但我希望能够控制缓存时间,而不仅仅是希望我有足够的内存。
答案 0 :(得分:3)
没有
tempdb
有a bit less logging比常规数据库,因为它不需要在交易的酸和重做中支持“D”,但这就是它。
答案 1 :(得分:2)
不是真的。您可以通过SQL Server通过SQLCLR实现自定义解决方案来执行此类操作。您也可以使用临时表或表变量,但这些仍将写入磁盘。您可以通过使用不同的ISOLATION LEVEL(例如READ_UNCOMMITTED)来提高性能(通过减少阻塞)但打破一致性。
简而言之,如果你真的想要你所要求的,SQLCLR就是解决方案。
答案 2 :(得分:2)
从MSSQL 2014开始是。
MSSQL 2014中有一项名为内存中OLTP 的新功能。
详细功能介绍: http://technet.microsoft.com/en-us/library/dn133186(v=sql.120).aspx
答案 3 :(得分:1)
您可以将表存储在ramdisk上。这样它总是在记忆中。
但是,我会首先尝试普通表。 SQL Server在缓存内存中的表方面做得非常好。
答案 4 :(得分:1)
表变量:
DECLARE @name TABLE (id int identity(1,1), ...);
表变量保存在内存中而不记录。在内存压力下,它们可以溢出到tempdb。但是,由于它们仅限于批量执行的范围,因此将数据存储在“大约一天”中将很困难(但并非不可能)。我绝对不会推荐基于SQL Server表变量的内存非酸解决方案。但是,正如Martin已经指出的那样,tempdb中的真实表是改善延迟的可行替代方案。通过适当的事务管理(批量提交)和文件放置(专用高吞吐量日志磁盘),您也可以在持久DB上获得类似的结果。