sql-server - SQLite 与 SQL Server

标签 sql-server sqlite

<分区>

有人能区分什么是最好的 SQLite 或 SQL Server 吗?我使用 XML 文件作为数据存储添加、删除、更新。有人建议使用 SQLite 进行快速操作,但我不熟悉 SQLite 我知道 SQL Server。

最佳答案

SQLite 是一个很棒的嵌入式数据库,您可以将其与您的应用程序一起部署。如果您正在编写客户将安装的分布式应用程序,那么 SQLite 的一大优势是没有任何单独的安装程序或维护——它只是一个与您的应用程序的其余部分一起部署的单个 dll。

SQLite 也在进程中运行,减少了数据库带来的大量开销——所有数据都在进程中缓存和查询。

SQLite 与您的 .NET 应用程序集成比 SQL 服务器更好。您可以使用在 SQLite 引擎内运行但仍在应用程序的调用进程和空间内的任何 .NET 语言编写自定义函数,因此可以调用您的应用程序以集成其他数据或在执行查询时执行操作。这种非常不寻常的能力使某些操作变得更加容易。

SQLite 通常比 SQL Server 快很多。

但是,SQLite 一次只支持一个写入器(意味着执行单个事务)。 SQLite 在需要锁定(读或写)时锁定整个数据库,并且一次只有一个写入者可以持有写锁。由于它的速度,这对于中小型应用程序实际上不是问题,但如果您有更高的写入量(每秒数百次),那么它可能成为瓶颈。有许多可能的解决方案,例如将数据库数据分离到不同的数据库中并将写入缓存到队列中并异步写入。但是,如果您的应用程序很可能会遇到这些使用要求并且尚未针对 SQLite 编写,那么最好使用具有更细粒度锁定的其他工具,例如 SQL Server。

更新:SQLite 3.7.0 添加了一种称为预写锁定的新日志模式,支持并发读取和写入。在我们的内部多进程竞争测试中,对于完全相同的竞争读/写序列,时间从 110 秒变为 8 秒。

关于sql-server - SQLite 与 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4539542/

相关文章:

sql - 使用 T-SQL 查询具有重复字段的表的高效方法是什么?

java - 在数据库中存储一个大字符串?

sql - 插入数据忽略当前事务

ios - 如何在 Swift 中使用 GRDB 创建多对多关联?

java - 没有这样的表 SQLite 错误无法编译

sql-server - 连接 2 个表时排除输出中重复列的 T-SQL 语法是什么?

sql-server - 从一个 SQL Server Express 复制到另一个

python - 如何使用 MySQL 作为 django 项目的数据库?

java - 如何解决 OrmLite 中巨大的 byte[] 问题

c# - 使用 C# 连接到 SQLite