是不是SQLite有点被低估了?[关闭]


15

在提出问题之前,让我首先描述一下我对SQLite的看法。

我碰巧喜欢小型,快速且更重要的是仅具有真正必要功能的工具。这就是为什么我喜欢SQLite而不喜欢MS-SQL的原因。

例如:MS-SQL可能具有更多的功能,可伸缩性等,但是如果您不走运,安装它也会很麻烦。当然,我并不是说安装困难是不选择特定数据库的原因。

不能误解我的意思:MS-SQL是优质产品。我对MS-SQL很有经验;我非常了解产品。我只是不太喜欢它,而在某些情况下并不需要它(=没有多少用户,<10-15)。

您实际上使用了多少数据库功能?以我的经验,它通常只是普通的SQL(SELECT,INSERT和UPDATE)。

我喜欢SQLite。快速着迷。“安装”非常容易。我认为SQLite可以做的比声明的要多。为什么只将其用于单进程/单个用户应用程序?毕竟:没有多少应用程序会不断访问数据库。

例如:考虑一个有15个用户的ERP应用程序。为什么不能使用SQLite?让我们面对现实吧:以我的专业经验,大多数时间,此类应用程序的用户访问数据库的时间将占他们使用该应用程序的总时间的5-10%。在另外90-95%的区域中,他们只是看着屏幕上的信息,以表格/表格形式输入数据,并且保存输入的时间不超过数据库时间的1秒。铁:1.5分钟的输入时间与1秒的保存时间。

如果SQLite数据库文件在“节省时间”期间被锁定,则需要访问数据库的其他用户只会等待,但他们不会注意到,因为等待时间会非常短(不明显)。在代码中,您只需要处理数据库可能的“繁忙”时间,以避免出现异常,但这并不难做到。

有些人必须像我一样思考,甚至​​为SQLite构建了一个客户端-服务器解决方案:SQLitening。这使我更加相信自己可能不会自欺欺人。

当然,有些数据库密集型应用程序不适合使用SQLite。但是,正如我现在考虑的那样,许多多用户应用程序(如果它们不超过15个用户)应该可以很好地使用SQLite。

我们的许多客户在硬件上的花费并不多,因此我经常遇到一台服务器,上面有所有东西(Exchange,SQL,客户端等),因此几乎“气喘吁吁”。如果我可以提供对系统要求不高的产品,那么我的客户将很高兴。SQLite不会增加任何权重(至少不会增加多少),​​MS-SQL会增加。因此,我不会选择SQLite,因为它是免费,便宜或易于安装的。我出于实际/技术原因会选择它。

仅供参考:根据我的专业,我们向客户销售产品(自定义和标准产品,主要是与ERP相关的产品),平均而言,使用该产品的客户不超过5-6人。有一些例外,但用户数不能超过10-15。

问题是:我是否认为可以将SQLite用于某些多用户应用程序(如我所描述的示例)正确吗?我应该知道什么技术上的缺点吗?您有哪些经验(负面或正面)可以帮助我做出正确的选择?

更新:请不要将此视为对其他数据库的负面判断。它们大多都是优质产品。只是在这里分享我的想法并对您对此的看法感兴趣。


9
抱歉,但是添加“我对吗?” 不会把咆哮变成问题。
pdr

1
@pdr:您为什么认为这是一种rant骂?我不会否定MS-SQL或其他数据库。他们大多都是优质产品。我只是分享我的想法,并且有兴趣听取其他程序员的意见。仅此而已。

3
那里没有问题,只有搜索才能进行验证。在FAQ中:“您仅应根据遇到的实际问题提出实用,可回答的问题。闲谈,开放式问题会削弱我们网站的实用性,并将其他问题从首页上推开。” programmers.stackexchange.com/faq
PDR

1
@pdr:我理解这一点,但老实说,我想在这里问一个问题。也许我不清楚,所以我改了个问题。

4
数据库选择,代码优化,客户端,服务器或基于Web的应用程序,这些都是要考虑的领域,需要在这样的平台上讨论优缺点。对我来说,当某人断然拒绝在特定技术中找到任何可兑换的质量时,咆哮就更多了。
JeffO 2011年

Answers:


8

在很多情况下,SQLite都很丰富。用户,部门或公司很少将其淘汰(我们对此了解不多,因为如果应用程序运行良好,则没人会调用程序员。)对于MS Access文件(Windows)或SQL Server Compact Edition(需要某些安装)。它们对于本地应用程序都足够好,因为您不必太担心文件的安全性。

在本地网络上的多用户场景中,文件将转到所有用户都需要访问的共享文件夹-呼叫安全性。简单的维护或任何表结构的更改(例如备份或添加列)都将阻止其他用户访问。昨晚备份失败,因为有人忘记退出该应用程序。当您想在一天中进行备份时会发生什么?每个人都有理由认为,由于数据库的技术限制,他们白天不需要任何备份。在某些时候,在您的服务器上安装SQL Server Express /其他等效版本将需要一些初始设置和安全性配置,这在前面就涉及更多,但是几乎不需要维护。

始终存在对可伸缩性/过度设计的担忧。即使用户数量或数据量仍可管理,但总有人会想到利用某个Intranet或其他网站/浏览器界面上的实时数据。文件数据库存在问题。只有一个想要通过VPN访问数据文件的人(该应用程序安装在他们的笔记本电脑上)才能为您解决“扩展”问题。您可以构建该应用程序,以允许断开连接的用户返回时可以同步。对于偶尔不在办公室的用户来说,这似乎并不值得。


您可以为SQL Server Compact Edition输入相同的参数,但不能为MS Access数据库输入相同的参数。Access数据库被视为真实数据库,但其工作方式类似于共享文件。它们是一个脆弱的解决方案。实际上,SQL Server Compact是一种更好,更快,更可靠的替代方案,仍然可以与Access前端一起使用。我怀疑SQLite实际上比Access数据库更耐用,即使从技术上讲它是共享文件解决方案。
罗伯特·哈维

@RobertHarvey-我们的业务需求是,十年以来,MS Access一直是一个很好的解决方案(即优于Excel)。达成重大协议后,我们必须启动并运行一些东西。具有Access技能的高级用户更容易找到和利用。该功能必须在某个日期之前存在,但是我们很幸运,可伸缩性,性能,数据增长和安全性从来没有成为一个因素。升级Access,这是另一回事了。
JeffO

不要误会我的意思;我认为Access很棒。但是对于用户共享数据的任何新Access应用程序,SQL Server Compact都是我的最低后端要求。
罗伯特·哈维

@RobertHarvey-我得研究一下。谢谢
JeffO

12

我认为,当您需要“内部”数据库时,使用它会很棒。也就是说,您的应用程序/代码将与之交互的数据库,但不会与您的应用程序存在的主要原因直接相关。除了使用庞大的内存映射或高速缓存管理器之外,您还可以使用此类数据库。我有一个非常具体的例子,最近我在JUnit / DBunit测试用例中使用了它,我需要连接到数据库,执行一些工作,读取数据并最后擦除所有内容。由于您只需要创建一个空文件来创建数据库,这很容易做到。

我看到的另一种用法是:只有一个用户时。是的,有可能,例如以“ Firefox”或“ Opera”为例:-)

另外,在SQLite网站上,他们对此非常诚实,并给出了何时不使用它的原因(请参见“其他RDBMS可能会更好地工作的情况”一节)

ps:与Sql Server Express上的注释有关,是的,需要“安装”。而且,我个人更新时遇到了一些麻烦(我必须手动删除一些与先前版本相关的注册表项,才能安装2008 R2)。但是,如果要将SQLite与Microsoft开发的数据库进行比较,请查看不需要安装的Sql Server Compact Edition(请参阅“基于私有文件的部署”)。


我看了CE,但是以某种方式看来SQLite更好/更快/更容易。不确定,我对CE的使用/测试不够肯定。

5

例如:考虑一个有15个用户的ERP应用程序。为什么不能使用SQLite?

很少有应用程序永远拥有很少的用户。对于看到更多用户和更复杂数据操作的用户,由于简单的“一次一次写入事务”锁定模型,出于性能原因,完全不使用SQLite。

假设您有100位用户,每位用户工作60秒,然后填写表格,然后提交。因此,您需要每秒处理约1.6个事务。数据模型很复杂,保存表单涉及到读取和写入许多大表,甚至可能与不同的系统进行通信,因此,每个“提交表单”都需要2秒钟的时间进行交易。但是SQLite不能同时处理事务,因此这意味着它每秒只能处理0.5个事务。哎呀

“安装可能会很痛苦”并不是决定采用关键基础架构的充分理由。此外,还有其他数据库引擎可供选择,其中至少有两个(MySQL和Postgres)是免费的,并且没有SQLite的并发限制。它们甚至可能比MS-SQL更容易安装。


我理解并同意。但是在我的职业中,我真的没有客户使用我们的产品(标准和定制,主要是与ERP相关)超过10人。平均来说,它甚至是5-6个用户。我改一下我的问题。

4
@Marcus V:问题是:如果客户增长了很多,并且发现您构建的应用程序的使用速度变得不可思议,您告诉他们的原因是DBMS无法处理那么多用户,他们问“您为什么不使用更好的DBMS”,您如何看待“很难安装”的答案?我可以告诉您我的反应是:我想“这是一个业余爱好者。我需要找到其他人来编写我的软件”。
Michael Borgwardt

你是对的。我认为您不是那样说的,但我可以向您保证我不是业余爱好者。如果情况需要,我肯定会使用“真正的” DBMS系统。我们的产品已为多个用户许可。仅当我知道用户数量相对较少(<10-15)时,才使用SQLite进行开发。如果客户超出了限制(在我们的客户群中不会很快发生),我们始终可以相对快速/简单地将其转换为其他数据库。那不是火箭科学;)。根据您的发言,我对问题进行了重新表述,以使其更加清楚。

那些对应用程序增长感到不满的用户可能会被告知用户限制,但选择了便宜的路线。在初始设置上一切都很好,但是当您不得不向他们收取另外的费用以在新服务器上安装,并且他们本来可以复制文件时,他们会多么高兴?
JeffO 2011年

1
@Jeff O:我想你误解了我的意图。我不是因为它是免费的,便宜的和/或易于安装选择的SQLite。我之所以选择它,是因为它体积小,速度快且资源友好。所以这主要是出于实践/技术原因。我们的许多客户在硬件上的花费并不多,因此我经常遇到一台包含所有内容(Exchange,SQL等)的唯一服务器,因此这几乎是“喘不过气来”。如果我可以提供对系统要求不高的产品,那么我的客户将很高兴。SQLite不增加任何权重,MSSQL不会增加任何权重。

4

我认为SQLLite对于应用程序开发非常有用,它的最大优势是不需要在客户端上安装它。

但是,也不要小看SQL Server Express,它是一个免费的优秀数据库,具有普通sql Server的大多数功能,但数据库大小有限(很难超过),并且能够使用常规的出色工具sql服务器。

最大的缺点是您需要安装它,尽管我对此部分尚不确定,但现在可能可以解决


2
你是对的。MS-SQL Express是优质产品。只是我发现它有点肿并且使用了太多资源。在当今的PC /服务器上,这已不是问题。我只是一个老派,仍然认为更强大的硬件并不意味着如果可以避免的话,我应该忽略/浪费资源。少一点更好...;)。

2
具有DB引擎的数据库可以通过缓存内存而不是从磁盘读取/写入来优化访问。但是我不确定像SQL Lite这样的进程内数据库的性能
sarat 2011年

1
@sarat:Afaik SQLite确实大量使用内存缓存。

2

如果您每小时要处理几GB的数据,我不认为SQLite是一个严肃的数据库。它变得非常缓慢,并降低了整个应用程序的性能。抱歉,但我不同意您对SQLite的迷恋:-)


1
我尊重你的意见。我只是一个务实的人。选择工具时,我选择它是因为我认为这是最现实/最实际的决定。我并不对SQLite着迷,但确实佩服他们设法在如此小的,高效和快速的程序包中投入这么多的方式。就像我在问题中提到的那样:如果MS-SQL是针对特定工作的更好工具,那么我只需选择它。但是,正如我所解释的,在很多情况下,我确实相信SQLite恰好适合。

大量的数据使用是很大的。
JeffO 2011年

@Jeff O:对。如果用户数量相对较少(<10-15)并且数据总量也不高,我只会选择SQLite。根据我们的经验,数据库的总大小通常为300-400MB,几乎从未大于1GB。

1

数据库的问题在于它们倾向于累积越来越多的数据。选择轻量级数据库会带来您的工具无法正确扩展的风险。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.