SQLite作为低流量站点的生产数据库?

时间:2009-05-26 22:21:44

标签: database sqlite production-environment

我正在考虑将SQLite用作一个可能会同时接收20个用户的网站的生产数据库,但是可能会有多倍的峰值(因为该网站可以在开放的互联网上访问总有可能有人会在某个地方发布链接,这可能会让很多人一次性地赶到网站上。

SQLite有可能吗?

我知道这不是一个理想的制作场景。我只是问这是否属于现实可能性范围。

10 个答案:

答案 0 :(得分:52)

SQLite不支持任何类型的并发,因此您可能在生产网站上运行它时遇到问题。如果您正在寻找一个“更轻”的数据库,也许可以考虑尝试像CouchDB这样的当代对象文档存储。

一定要继续针对SQLlite开发,你可能最初使用它。如果您发现您的应用程序有更多的用户,那么您将希望转换为postgres或mysql。

SQLlite的作者解决了这个on the website

  

SQLite通常可以作为中低流量网站(也就是所有网站的99.9%)的数据库引擎。当然,SQLite可以处理的Web流量大小取决于网站使用其数据库的程度。一般来说,每天点击次数少于100K的网站应该可以正常使用SQLite。 100K点击/天的数字是一个保守估计,而不是一个硬上限。 SQLite已被证明可以使用10倍的流量。

     

SQLite通常可以正常工作作为网站的数据库后端。但是,如果您的网站太忙,以至于您正在考虑将数据库组件拆分到一台单独的计算机上,那么您一定要考虑使用企业级客户端/服务器数据库引擎而不是SQLite。

所以我认为它的长短不一,去吧,如果它不适合你,那么转换到企业级数据库无论如何都是相当微不足道的。但请注意您的架构,并在设计数据库时考虑增长和效率。


这里有a thread,其中有一些关于将SQLite用于生产Web应用程序的更多独立评论。听起来它已被用于一些混合的结果。


编辑(2014)

由于此答案已发布,SQLite现在提供multi-threaded modewrite ahead logging mode,这可能会影响您对中低流量网站的适用性的评估。

Charles Leifer撰写了a blog post关于SQLite的WAL(提前写入日志记录)功能和一些考虑周全的适当用例的意见。

答案 1 :(得分:9)

SQLite website的一小段摘录说明了一切。

  
      
  • 网络上的数据是否与应用程序分开? →选择   的客户机/服务器

  •   
  • 许多并发作家? →选择客户端/服务器

  •   
  • 大数据? →选择客户端/服务器

  •   
  • 否则→选择 SQLite

  •   

SQLite“正常工作”(直到它当然没有)

答案 2 :(得分:6)

我们经常将SQLite用于内部数据库;员工目录,我们的事件日历和其他Intranet服务都在轻量级数据库上运行。以我们在像mySQL这样的“真实”数据库上执行的规模运行这些应用程序将是一件非常大的事。当您考虑到他们在单个中档计算机上运行4个其他虚拟机时,尤其如此。

有一次,我们有一个面向外部的网站,它在sqlite数据库上运行了几个月,只需要一次重启。显然,这是非常低的流量,但它很好地推进了它的工作。

答案 3 :(得分:2)

我们在绝对没有写的环境中遇到过类似的选项,我们选择使用SQLite。

请参阅我的blog post主题:

  

嗯,理论上提出这个解决方案的主要假设   可能的是我们的SQLite数据库是完全只读的。我们的服务器   代码永远不应该改变它。这将解决任何锁定问题,如   没有读锁。我们在互联网上找不到任何人   说当SQLite的高吞吐量读取存在问题   没有写 - 这可能是有可能的!

答案 4 :(得分:1)

我认为这主要取决于你的读/写比率。如果它主要是从数据库读取,你可能没问题。 SQLite中的多用户写入可能是一个问题,因为它如何锁定数据库。

答案 5 :(得分:1)

人们谈论并发问题,但sqlite有办法缓存传入的请求并让它们等待一段时间。它不会立即超时。

我已经读过关于默认超时设置从零开始的事情,这意味着它会立即超时并且这是无意义的。也许人们没有调整这个设置?

答案 6 :(得分:0)

取决于网站的使用情况。如果大多数时候你只是在阅读数据,那么你几乎可以使用任何数据库并在应用程序中缓存数据以获得良好的性能。

答案 7 :(得分:0)

我在非常低流量的Web服务器(它是基因组数据库)中使用它,我没有任何问题。但是只有SELECT语句,没有写入数据库

答案 8 :(得分:0)

添加一个已经很好的答案:由于您在这种情况下使用的是无服务器解决方案,您可以告别复制,或者您的数据库的任何类型的水平扩展,以及其他高级选项。如果您有多个用户更新相同的信息块,它也不是最佳选择。如果您将来要对数据库进行分片,则必须迁移数据并转移到其他位置。此外,如果您有负载均衡器和涉及多个系统,如果使用sqlite,将很难保持数据中心性。这些只是为什么不推荐它的一些原因。它非常适合小型项目,非常适合开发。

答案 9 :(得分:0)

似乎排队时你也可以避免SQLite的大量并发写问题。您可以写入队列,然后依次以先进先出模式顺序写入sqlite数据库,而不是直接写入sqlite数据库。如果您的应用程序值得编写或者只是转移到客户端/服务器数据库,那么不确定您的应用程序是否达到了您需要的位置......但是想一想。