实时数据库和“普通”数据库有啥区别?
Posted
技术标签:
【中文标题】实时数据库和“普通”数据库有啥区别?【英文标题】:What is the difference between a realtime database and a "normal" database?实时数据库和“普通”数据库有什么区别? 【发布时间】:2017-09-11 11:20:22 【问题描述】:我正在研究一些用于开发 Web 应用程序的后端即服务 (BaaS) 解决方案,我经常看到Firebase refers to their database as a "realtime database",而例如Backendless doesn't mention the phrase "real time" anywhere。
我知道实时意味着数据会立即处理,但我认为所有数据库都这样做了?例如,如果我有一个 mysql/SQLite/PostgreSQL 数据库并插入数据,我希望它可以在(毫秒)秒后进行检索,并且肯定是在“INSERT ...”查询完成后直接检索。
与其他 BaaS 服务“普通”数据库相比,有人能解释一下 Firebase 实时数据库有何不同吗?
【问题讨论】:
在该页面上向下滚动一点:“与典型的 HTTP 请求不同,Firebase 实时数据库使用数据同步 - 每次数据更改时,任何连接的设备都会在几毫秒内接收到该更新。提供协作和身临其境的体验,无需考虑网络代码”。客户不必轮询,他们会收到有关数据更改的通知。 啊,好吧,所以区别不在于数据存储的速度,而在于数据库可以实时向客户端发送有关更改的推送通知这一事实?例如,使用 Backendless 客户端将不得不手动轮询数据库以查看更改?这是有道理的,但它的名字有点令人困惑......我猜“通知数据库”或“可观察数据库”听起来并不那么吸引人...... 另一个令人困惑的原因是Wikipedia 说实时数据库使用 "[...] 时序约束来表示数据有效的特定范围的值 i>。这听起来像是实时数据库更像是非持久性临时缓存而不是永久存储解决方案?我想这根本不是 Firebase 用他们的术语的意思吗? 另外,如果服务器支持 HTTP 长轮询,那实际上不是一回事吗? 它不是“实时数据库”。它是“Firebase 实时数据库”。这只是一个产品名称。您可能很容易想知道“Firebase”是什么。 【参考方案1】:术语实时有点令人困惑,但实际上 Firebase 与普通数据库有很大不同。有两个主要区别。首先是它存储数据的方式,另一个是我们访问它的方式。在普通数据库中,当后端数据更新时,我们需要刷新浏览器或 android 应用程序才能获取更新的数据,而在 Firebase 中,我们甚至不需要刷新页面。从任何其他客户端浏览器所做的更改将反映到所有连接的客户端,而无需进行任何服务器端调用。
【讨论】:
【参考方案2】:它很少与人们如何创造“实时”这个名称或它是否作为 BaaS 提供有关。如果通过优化存储和检索可以更快地检索数据,则可以将其归类为实时。例如。实时数据库Aerospike、SAP Hana、Volt DB、memcached、redis 和 SQLite。
实时或内存数据库,
-
数据存储在 RAM 中。为了可靠性,数据备份在非易失性存储器上。 nvram 将来可能会用到。
成本较高。
高性能。
不需要序列化。使用指针访问数据。
使用 AVL 树(或其他最佳数据结构)进行索引以支持范围查询。
RDBMS“普通”数据库,
-
数据存储在硬盘或 SSD 中。
成本低。
耐用。
需要序列化,因为数据存储在文件中。
使用 BTree 进行索引。
【讨论】:
以上是关于实时数据库和“普通”数据库有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
日志采集系统flume和kafka有啥区别及联系,它们分别在啥时候
get() 和 addListenerForSingleValueEvent 有啥区别?
Web 应用程序有啥方法可以从支持蓝牙的硬件读取实时数据?如果没有,有啥替代方案?