用于大容量事务的 Sql Ce 性能

Posted

技术标签:

【中文标题】用于大容量事务的 Sql Ce 性能【英文标题】:Sql Ce performance for high volume transactions 【发布时间】:2015-10-03 16:15:40 【问题描述】:

我在 ASP.NET MVC 中有一个简单的 Web 应用程序,它使用 Sql CE 作为后端数据库,使用 EF。一切正常,除了我想记录用户在应用程序中访问 api 的印象日志——我收到了足够多的请求,导致服务器崩溃。我尝试了几个性能不够好的选项,我不得不禁用它们。我正在关闭数据库中具有唯一索引的用户 ID。

-在所有情况下,如果数据库中不存在该成员,则会创建并保存一条新记录。

在 v1 中,在 db 中查找成员,增加印象计数器,保存记录。这太慢了,导致服务器崩溃。

在 v2 中,我只是检查了记录是否存在并创建它。如果它存在,我什么也不做。这仍然太慢,但比 v1 快。

我正在考虑为此保留一个内存数据库,并偶尔将其存储到 sql ce。我担心的是,如果我在几秒钟内存储 1000 个项目,然后尝试将它们存储在一次更新中,这仍然行不通吗? 感觉 sql ce 可能根本无法做我需要的事情,还是我忽略了一些简单的性能优化?

【问题讨论】:

您面临的是一个简单的 EF+SQL CE 性能问题。我也遇到了这个问题,并且它变得更快(大约快 15 倍!),并且已经打开的连接传递到上下文 - 似乎带有 CE 的 EF 在连接处理方面存在问题,与第一个连接一起打开连接查询将非常耗时,特别是如果您的数据库架构与您的 POCO 类不完全匹配或数据库是在另一个操作系统上创建的(或者有时甚至是文件的访问问题)。 好的,我以为它在后台使用了连接池,但我会测试一下。 通过原始 ADO.net 使用 TableDirect 接口,并如上所述实现连接处理/预热 所以我将一些东西移到内存中,然后偶尔在一个线程中进行写入。这运作良好。但是,我现在正在尝试将我的项目从 EF4 升级到 EF6(以及将 vs2012 迁移到 2013 等),并且由于某种原因,它现在存在“打开的连接太多”的问题。感觉就像每个网站访问者都在保持连接打开,直到它用完。除了更新之外,所有正常的站点代码都是相同的!知道 ef6 如何导致这个奇怪的问题吗? 【参考方案1】:

我认为在这种情况下考虑将 SQL Server Express Edition/LocalDB 作为 SQL Server CE 的替代品是个好主意。 SQL Server CE 是设计用于桌面应用程序或移动设备的轻量级数据库。 CE 4.0 针对 ASP.NET 应用程序进行了改进,但在常见情况下其性能不会那么好。

【讨论】:

是的,我可能会搬到那里

以上是关于用于大容量事务的 Sql Ce 性能的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server CE 性能

先锋事务高性能,王涛谈打造超越MongoDB的NoSQL

CSDN----先锋事务高性能,王涛谈打造超越MongoDB的NoSQL

SQL Server CE性能,从表中选择7000条记录需要8s

ABAP性能和优化

LINQ2SQL 事务的性能