我想设置一个teampeak 3服务器。我可以选择SQLite和MySQL作为数据库。好吧,我通常倾向于“不要在生产中使用SQLite”。但另一方面,它是一个teampeak服务器。好吧,让我谷歌这个......我发现了这个:
- 速度
醇>
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之间的数据库架构方面存在一些重大差异,这解释了速度的巨大差异(我无法想象这一点)。
答案 0 :(得分:12)
首次访问时间将在SQLite中显得更快
SQLite的访问时间在第一次实例时会显得更快,但在线用户数量较少。 SQLite使用非常简单的访问算法,速度快但不处理并发。
随着数据库开始增长,同时访问量将开始受到影响。服务器处理多个请求的方式完全不同,而且更复杂,并针对高并发性进行了优化。例如,如果正在进行更新,SQLite将锁定整个表,并对订单进行排队。
RDBMS&s;做了大量额外的工作,使它们更具可扩展性
例如,MySQL,即使只有一个用户,也会创建一个访问QUEUE,部分锁定表而不是只允许每次执行一次用户,以及其他相当复杂的任务,以确保数据库仍可供任何其他人访问同时访问。这将使单个用户连接速度变慢,但是在将来有100个用户在线时会得到回报,在这种情况下,简单 "锁定整个表格,每次执行单个查询" SQLite的程序会占用服务器。
SQLite是为了简化和自包含数据库应用程序而设计的。
如果您希望SQLite一次可以在数据库中同时进行10次访问写入,那么您将不会想要一个100位用户应用程序,该应用程序使用SQLite不断地向数据库写入和读取数据。它不是为这种情况设计的,它会浪费资源。
考虑到你的TeamSpeak场景你可能对SQLite没问题,即使对于某些业务来说也没关系,有些网站需要只读数据库,除非在添加新内容时。
对于这种用途,SQLite是一种廉价,易于实现,自包含,完美的解决方案,可以完成工作。
答案 1 :(得分:4)
我没有亲自测试SQLite与MySQL,但很容易在网上找到相反的例子(for instance)。你确实提出了一个不那么虔诚的问题:这个论点有效吗?
首先,论证的本质有点似是而非。 Unix套接字将用于与数据库服务器通信。 “文件数据库”似乎指的是通信是通过编译接口进行的。在SQLite的术语中,它是server-less。大多数数据库将数据存储在文件中,因此术语“文件数据库”有点误导。
数据库的性能涉及多个因素,例如:
编译接口会影响其中的第一个和最后一个。没有什么可以阻止无服务器数据库在其余数据库中表现优异。但是,数据库服务器通常是数百万行代码 - 比SQLite大得多。其中很多都支持额外的功能。其中一些支持改进的优化和更好的算法。
与大多数性能问题一样,答案是自行测试系统中的数据。无服务器不是自动性能提升。拥有一台服务器并不能使数据库“更好”。它们是针对不同优化点设计的不同应用程序。
答案 2 :(得分:2)
相关的区别在于SQLite使用更简单的锁定算法(简单的全局数据库锁)。
使用细粒度锁定(如MySQL和大多数其他数据库服务器那样)很多更复杂,如果只有一个数据库用户则更慢,但如果你想允许更多的数据用户则需要
答案 3 :(得分:0)
简而言之:
在你的问题中,我不太了解teamspeak服务器以及它实际上需要在其数据库中保留什么样的数据,但如果它只需要一个本地DBMS而不需要处理大量并发和管理SQLite将是我的选择.