【问题标题】:Concurrency in database systems with/without server有/没有服务器的数据库系统中的并发性
【发布时间】:2011-12-06 23:14:51
【问题描述】:

通常注意到没有服务器的简单数据库系统(例如 GDBM、SQLite 等)对于并发连接的能力较弱。

  1. 数据库服务器如何处理并发连接以获得更好的并发性?

  2. 我认为在没有服务器的数据库系统中读取并发性更好,因为从平面文件读取数据没有限制。限制应该是可用内存吧?

  3. 问题在于写入并发,因为文件将被锁定。因此,一次只能写入一个。我认为 Mysql 也是如此(使用 MyISAM 引擎,因为 InnoDB 中的锁定仅限于行)。实际有并发写吗?

总体而言,有服务器的数据库系统(例如 Mysql)的并发性如何优于没有服务器的系统(例如 SQLite)?

【问题讨论】:

    标签: mysql database sqlite concurrency nosql


    【解决方案1】:
    1. 许多数据库服务器支持事务和行级锁定

    2. 没有写入的读取并发非常容易获得。在进行更新时让读者更难。具有行级锁定的数据库将允许在更新期间无法读取其他行上的平面文件和 SQLite 表。

    3. 在许多实际系统中,您将混合读写。在实践中并发写入?想想 stackoverflow 或任何繁忙的论坛,都会有大量的并发写入。

    SQLite 仅支持表级锁定,因此在存在许多并发用户的更新时会非常慢。另一方面,嵌入式数据库几乎是零设置,它们对于单个用户或在并发用户数量有限的网络服务器上都非常有用。

    我从Trac 邮件列表中听说,SQLite 后端是实用的,直到大约少数开发人员在切换到 MySQL 或 Postgres 变得必不可少之后。

    【讨论】:

    • MySQL MyISAM(这是最常见的引擎)与表锁定一起工作。就在最近人们被 InnoDB 所吸引。这是我的问题的重点。带有 MyISAM 引擎的 MySQL 与 SQLite 并没有太大的不同。我说的对吗?
    • 另一个区别是可以通过网络访问MySQL。无论如何,SQLite 还引入了WAL mode,这应该会改变一些规则。
    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2018-09-10
    • 2017-11-05
    • 2013-12-18
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多