28

我想建立一个teampeak 3服务器。我可以选择 SQLite 和 MySQL 作为数据库。好吧,我通常倾向于“不要在生产中使用 SQLite”。但另一方面,它是一个团队语音服务器。好吧,让我用谷歌搜索一下……我发现了这个:

  1. 速度
    SQLite3 比 MySQL 数据库快得多。这是因为文件数据库总是比 unix socket 快。当我请求编辑频道时,在 MySQL 数据库(127.0.0.1)上大约需要 0.5-1 秒,在 SQLite 3 上几乎立即(0.1 秒)。 [...]

http://forum.teamspeak.com/showthread.php/77126-SQLite-vs-MySQL-Answer-is-here

我不想开始 SQLite 与 MySQL 的辩论。我只想问:他的论点是否有效?我无法想象他说的是真的。但不幸的是,我不够专业,无法自己回答这个问题。

也许 TeamSpeak 开发人员的数据库架构在 SQLite 和 MySQL 之间存在一些重大差异,这解释了速度上的巨大差异(我无法想象这一点)。

4

4 回答 4

41

在 SQLite 中,首次访问时间会更快

SQLite 的访问时间一开始会显得更快,但这是在少数用户在线的情况下。SQLite 使用了一种非常简单的访问算法,它速度快但不处理并发。

随着数据库开始增长,同时访问量将开始受到影响。服务器处理多个请求的方式完全不同,而且更加复杂,并且针对高并发进行了优化。例如,如果更新正在进行,SQLite 将锁定整个表,并将订单排队。

RDBMS 做了很多额外的工作,使它们更具可扩展性

例如 MySQL,即使只有一个用户,也会创建一个访问 QUEUE,部分锁定表而不是只允许单个用户每次执行,以及其他非常复杂的任务,以确保数据库仍然可用于任何其他同时访问。

这将使单个用户连接变慢,但在未来有 100 个用户在线时会得到回报,在这种情况下,SQLite 的简单“锁定整个表并每次执行单个查询”过程将占用服务器.

SQLite 是为简单和独立的数据库应用程序而设计的。

如果您希望一次在数据库中有 10 个同时访问写入,SQLite 可能会表现良好,但您不希望有 100 个用户的应用程序使用 SQLite 不断地向数据库写入和读取数据。它不是为这种情况设计的,它会浪费资源。

考虑到您的 TeamSpeak 场景,您可能可以使用 SQLite,即使对于某些业务也可以,某些网站需要只读数据库,除非添加新内容。

对于这种用途,SQLite 是一种廉价、易于实现、自包含、完美的解决方案,可以完成工作。

于 2016-07-25T18:25:11.970 回答
8

我没有亲自测试过 SQLite 与 MySQL,但很容易在网上找到相反的例子(例如)。你确实问了一个不太虔诚的问题:这个论点有效吗?

首先,论点的本质有些似是而非。Unix 套接字将用于与数据库服务器通信。“文件数据库”似乎是指通过编译接口进行通信的事实。在 SQLite 的术语中,它是无服务器的。大多数数据库将数据存储在文件中,因此术语“文件数据库”有点误导。

数据库的性能涉及多个因素,例如:

  • 查询到数据库的通信。
  • 编译速度(存储预编译查询的能力在这里是一个优势)。
  • 处理速度。
  • 处理复杂处理的能力。
  • 编译器优化和执行引擎算法。
  • 将结果传送回应用程序。

编译接口会影响其中的第一个和最后一个。没有什么可以阻止无服务器数据库在其他方面表现出色。然而,数据库服务器通常有数百万行代码——比 SQLite 大得多。其中很多都支持额外的功能。其中一些支持改进的优化和更好的算法。

与大多数性能问题一样,答案是自己根据环境中的数据测试系统。无服务器并不是自动的性能提升。拥有服务器并不能使数据库“更好”。它们是针对不同优化点设计的不同应用程序。

于 2015-04-04T23:07:22.997 回答
8

相关的区别是 SQLite 使用更简单的锁定算法(简单的全局数据库锁定)。

如果只有一个数据库用户,则使用细粒度锁定(如 MySQL 和大多数其他 DB 服务器所做的那样)要复杂得多,速度也更慢,但如果您想允许更多并发性,则需要这样做。

于 2015-04-05T09:17:51.697 回答
-1

简而言之:

  • 对于本地应用程序数据库、单用户应用程序和保留小数据的小型简单项目,SQLite 是赢家。
  • 对于网络数据库应用程序、多用户和并发、负载平衡和不断增长的数据管理、安全和基于滚动的身份验证、大型项目和广泛使用的服务,您应该选择 MySql。

在您的问题中,我不太了解 teampeak 服务器以及它实际上需要在其数据库中保留什么样的数据,但如果它只需要一个本地 DBMS 并且不需要处理大量并发和管理 SQLite 将是我的选择。

于 2021-04-07T03:32:33.833 回答