Cod*_*her 2 browser database database-administration
Chrome、Firefox、Opera 或 Safari 等 Web 浏览器最常用的数据库服务器是什么?也许我不了解 Web 浏览器,但我假设他们必须拥有一个数据库服务器,就像 Web 应用程序拥有数据库服务器一样。
我假设他们必须拥有一个数据库服务器,就像 Web 应用程序拥有数据库服务器一样。
这种假设的依据是什么?Web 浏览器和 Web 应用程序是不同的东西,它们做不同的事情;因此它们不会自动共享需求。
您猜对了,浏览器可以并且经常使用数据库——但它们不这样做,“因为 Web 应用程序使用数据库”。如果/当他们使用数据库时,他们有一个特定的需求:长期的、可搜索的、数据存储。就是这样。
对于许多 Web 应用程序,对数据库的需求是显而易见的:如果它们有用户帐户,则需要将这些帐户存储在某处;如果他们有用户可编辑的页面,他们需要将页面内容存储在某个地方;等等。Web 应用程序必须有数据库吗?仅当它需要存储数据时。
与此相比,网络浏览器会存储什么?通常它不运行webapp——它只呈现 webapp 发送的 HTML 页面。Web 应用程序的大多数内部结构,包括它是否使用数据库,都对浏览器完全隐藏。
相反,Web 浏览器中数据库的主要用途是实现浏览器自身的功能:存储浏览历史、书签或 cookie。(而且,是的,现在网页可以要求浏览器通过 JavaScript (IndexedDB) 存储一些东西——但这不是大多数 web 应用程序的主要存储。)
那么 Web 浏览器或任何其他桌面应用程序使用什么?嗯,它不使用数据库服务器——它使用嵌入式数据库。
数据库不需要专用的“服务器”程序。数据库服务器的存在是为了实现多用户功能(身份验证、权限检查、复制)。但是,如果数据库完全归您所有并且大小相当小(例如,只有您的网络书签),那么它不需要这些功能,并且可以使用简单的本地库来实现实际存储。
如果您需要完整的 SQL,最流行的“单文件”数据库可能是SQLite。Firefox 和 Chrome 都使用 SQLite 来存储书签;历史; 证书;喜好; 等等。
至于简单的非 SQL“键/值”数据库,Berkeley DB曾经是流行的选择——尽管由于许可问题和有些过时的设计,你经常看到它被LMDB和LevelDB(或者实际上被同一个 SQLite)取代。
例如:当网页使用 JavaScript IndexedDB API 时,Chrome 会将数据存储在 LevelDB 数据库中;Internet Explorer 使用 Windows ESENT;Firefox 使用 SQLite。
(还有很多其他嵌入式数据库类型——我之前链接到的维基百科文章有一长串——但它们远没有那么受欢迎。即使是内置ESENT 数据库引擎的 Windows 本身,也可以使用 SQLite 在次。)
最后,很多种类的数据都足够小,它们根本不需要完整的数据库引擎,可以直接放入文件中。许多浏览器实际上将 cookie 存储在文本“cookie jar”文件中——每行一个 cookie,每个域一个文件。Mozilla/Netscape 过去以单个几乎 HTML 网页的形式存储书签。现代选择通常是在存储数据之前使用 JSON 格式化数据。
正如我所指出的,这并不是 Web 浏览器特有的。他们只是使用数据库,因为他们有数据要存储——但邮件客户端、音乐播放器、游戏等也是如此,所有这些都经常有某种嵌入式数据库来保存数据。
(不要忘记,大多数程序保存设置的 Windows 注册表也是一个键/值数据库,文件系统本身也是如此。)