数据库替代品?

标签 database performance tradeoff

我想知道使用数据库的权衡以及其他选择是什么?还有,哪些问题不适合数据库?

我关心的是关系数据库。

最佳答案

数据库的概念非常广泛。我将对此处介绍的内容进行一些简化。

对于某些任务,最常用的数据库是关系数据库。它是一个基于关系模型的数据库。关系模型假定您按行描述数据,属于表,其中每个表都有给定和固定数量的列。您以“每行”为基础提交数据,这意味着您必须一次性提供一行,其中包含与表格所有列相关的数据。每个提交的行通常都会获得一个标识符,该标识符在表级别是唯一的,有时在数据库级别也是唯一的。您可以在关系数据库中的实体之间创建关系,例如通过声明表中的给定单元格必须引用另一个表的行,以保持所谓的“引用完整性”。

这个模型工作正常,但它不是唯一的模型。在某些情况下,数据更好地组织为树。文件系统是一个分层数据库。从一个根开始,一切都在这个根下,在一个树状结构中。另一种模型是键/值对。 Sleepycat BDB 基本上是键/值实体的存储。

LDAP 是另一种数据库,它有两个优点:存储相当通用的数据,它是按设计分布的,并且针对读取进行了优化。

图数据库和三元组允许您存储图并执行同构搜索。如果您有一个非常通用的数据集,该数据集可以包含对您的实体的广泛描述,那么广泛到基本上是未知的,这通常是需要的。这与关系模型明显相反,在关系模型中,您使用一组非常精确的列创建表格,并且您知道每一列将包含什么。

一些基于列的关系数据库也存在。您不是按行提交数据,而是按整列提交。

因此,回答您的问题:数据库是一种存储数据的方法。从技术上讲,即使是文本文件也是数据库,尽管不是特别好。数据库背后模型的选择主要与应用程序的典型需求有关。

将答案设置为 CW,因为我可能在说一些完全不正确的事情。随意编辑。

关于数据库替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1761533/

相关文章:

php - 交易情况的基本模式

mysql - 规范化、类别列表和 Codeigniter

php - 如何优化 MySQL (CentOS)

c - 在 C 中的字符串中搜索最有效的内存方式

c++ - Windows 上的 GNU GSL 和 MATLAB

mysql - 如何在Laravel中使用触发器?

java - 使用 eclipse 插件在 cloudfoundry 上部署 .rar

objective-c - 用于对象的 Switch 语句的高性能 Objective C 替代方案

angular - Redux/ngrx/store 架构 : why not dispatch actions from dumb components?

Python 搁置模块内存消耗