标签: rdbms

哪个数据库可以处理数十亿/万亿条记录的存储?

我们正在研究开发一种工具来捕获和分析我们收集的大量网络流量数据。每天我们捕获大约 14 亿条流记录,它们的 json 格式如下所示:

{
   "tcp_flags": "0",
   "src_as": "54321",
   "nexthop": "1.2.3.4",
   "unix_secs": "1352234521",
   "src_mask": "23",
   "tos": "0",
   "prot": "6",
   "input": "105",
   "doctets": "186",
   "engine_type": "0",
   "exaddr": "2.3.4.5",
   "engine_id": "2",
   "srcaddr": "9.8.7.6",
   "dst_as": "12345",
   "unix_nsecs": "752265174",
   "sysuptime": "2943529544",
   "dst_mask": "24",
   "dstport": "80",
   "last": "2943523241",
   "srcport": "52672",
   "dpkts": "4",
   "output": "111",
   "dstaddr": "6.5.4.3",
   "first": "2943517993"
}
Run Code Online (Sandbox Code Playgroud)

我们希望能够对数据集进行快速搜索(少于 10 秒),最有可能在很短的时间内(10 - 30 分钟间隔)。我们还希望索引大部分数据点,以便我们可以快速搜索每个数据点。我们还希望在执行搜索时拥有最新的数据视图。留在开源世界会很棒,但我们不反对为这个项目寻找专有解决方案。

这个想法是保留大约一个月的数据,这将是大约 432 亿条记录。粗略估计,每条记录将包含大约 480 字节的数据,相当于一个月内约 18.7 TB 的数据,可能是索引的三倍。最终,我们希望增加该系统存储数万亿条记录的能力。

我们已经(非常基本地)评估了 couchbase、cassandra 和 mongodb 作为这个项目的可能候选者,但是每个人都提出了自己的挑战。使用 couchbase,索引是每隔一段时间完成的,而不是在插入数据期间完成,因此视图不是最新的,cassandra 的二级索引在返回结果方面效率不高,因为它们通常需要扫描整个集群以获取结果,而 mongodb 看起来很有希望但是由于它是主/从/分片,因此扩展似乎要困难得多。我们计划评估的其他一些候选者是 elasticsearch、mysql(不确定这是否适用)和一些面向列的关系数据库。任何建议或现实世界的经验将不胜感激。

nosql rdbms mongodb sql-server cassandra

78
推荐指数
3
解决办法
4万
查看次数

NoSQL 和传统的 RDBMS 有什么区别?

NoSQL 和传统的 RDBMS 有什么区别?

在过去的几个月里,NoSQL 经常在技术新闻中被提及。与传统的 RDBMS 相比,它最重要的特征是什么?差异发生在什么级别(物理、逻辑)?

哪里是使用 NoSQL 的最佳场所?为什么?

nosql rdbms database-recommendation

71
推荐指数
5
解决办法
4万
查看次数

循环外键引用是否可以接受\如何避免它们?

在外键字段上的两个表之间进行循环引用是否可以接受?

如果没有,如何避免这些情况?

如果是这样,如何插入数据?

以下是(在我看来)可以接受循环引用的示例:

CREATE TABLE Account
(
    ID INT PRIMARY KEY IDENTITY,
    Name VARCHAR(50)
)

CREATE TABLE Contact
(
    ID INT PRIMARY KEY IDENTITY,
    Name VARCHAR(50),
    AccountID INT FOREIGN KEY REFERENCES Account(ID)
)

ALTER TABLE Account ADD PrimaryContactID INT FOREIGN KEY REFERENCES Contact(ID)
Run Code Online (Sandbox Code Playgroud)

rdbms foreign-key database-design

38
推荐指数
2
解决办法
4万
查看次数

为什么数据库不自动创建自己的索引?

我原以为数据库会对它们经常遇到的事情有足够的了解,并且能够对它们所面临的需求做出响应,以便它们可以决定向高度请求的数据添加索引。

rdbms index

33
推荐指数
5
解决办法
1万
查看次数

保留在表中更新的值是否可以?

我们正在开发一个预付卡平台,该平台主要保存有关卡及其余额、付款等的数据。

到目前为止,我们有一个 Card 实体,它有一个 Account 实体的集合,每个 Account 都有一个 Amount,它在每次存款/取款时更新。

现在团队中有一场辩论;有人告诉我们,这违反了Codd 的 12 条规则,并且在每次付款时更新其价值很麻烦。

这真的有问题吗?

如果是,我们如何解决这个问题?

rdbms database-design

31
推荐指数
4
解决办法
2966
查看次数

结合使用 MongoDB 和 PostgreSQL

我目前的项目本质上是一个工厂文件管理系统的运行。

也就是说,有一些皱纹(惊喜,惊喜)。虽然有些问题是项目特有的,但我相信有一些普遍的观察结果和问题没有规范的答案(无论如何我可以找到)并且适用于更广泛的问题领域. 这里有很多,我不确定它是否适合 StackExchange Q&A 格式,但我认为它 a) 一个可回答的问题和 b) 不够具体,它可以使社区受益。我的一些考虑是特定于我的,但我认为这个问题对任何面临决定 SQL 还是 NoSQL 还是两者的人都有用。

背景:

我们正在构建的 Web 应用程序包含本质上具有明显关系的数据以及面向文档的数据。我们想吃蛋糕,也想吃。

TL;DR:我认为下面的 #5 通过了气味测试。你?有没有人有将 SQL 和 NOSQL 集成到单个应用程序中的经验?我试图在下面列出解决此类问题的所有可能方法。我错过了一个有前途的替代方案吗?

复杂性:

  • 有许多不同类别的文档。这些要求已经需要数十种不同的文件。这个数字只会上升。最好的情况是,我们可以利用简单的领域特定语言、代码生成和灵活的模式,以便领域专家可以在没有 DBA 或程序员干预的情况下处理新文档类的添加。(注意:已经意识到我们正在实践Greenspun 的第十条规则
  • 以前成功写入的完整性是项目的核心要求。这些数据对业务至关重要。可以牺牲写入的完整 ACID 语义,前提是成功写入的内容保持写入状态。
  • 文件本身很复杂。在我们的特定案例中,原型文档需要为每个文档实例存储 150 多个不同的数据片段。病理情况可能会更糟一个数量级,但肯定不是两个。
  • 一类文档是一个移动的目标,在稍后的时间点会更新。
  • 当我们将 Django 连接到关系数据库时,我们喜欢从 Django 获得的免费东西。我们希望保留免费赠品,而不必跳回两个 Django 版本来使用 django-nonrel fork。完全转储 ORM 比降级到 1.3 更可取。

从本质上讲,它是关系数据(您的典型 Web 应用程序内容,如用户、组等,以及我们需要能够实时对复杂查询进行切片和切块的文档元数据)和文档数据(例如我们没有兴趣加入或查询的数百个字段 - 我们对数据的唯一用例将是显示输入的单个文档)。

我想对我的首选方法进行完整性检查(如果你检查我的发帖历史,我非常明确地说明我不是 DBA),并列举我遇到的所有选项供其他人解决涉及关系和非关系数据的广泛相似的问题。

建议的解决方案:

1. 每个文档类一张表

每个文档类都有自己的表,其中包含所有元数据和数据的列。

好处:

  • 标准 SQL 数据模型正在发挥作用。
  • 以最好的方式处理关系数据。如果需要,我们稍后会进行非规范化。
  • Django 的内置管理界面可以轻松地检查这些表,并且 ORM 可以 100% 使用开箱即用的数据。

缺点:

  • 维修噩梦。数十(数百?)个表(数十?)数千列。
  • 应用程序级逻辑负责准确决定要写入哪个表。将表名作为查询的参数很糟糕。
  • 基本上所有业务逻辑更改都需要架构更改。
  • 病理情况可能需要为跨多个表的单个表单条带化数据(请参阅:PostgreSQL …

rdbms postgresql document-oriented mongodb

28
推荐指数
1
解决办法
2万
查看次数

如果 NoSQL 代表“不仅是 SQL”,那么 SQL 是 NoSQL 的子集吗?

定义有点混乱 - 基本上我在问 SQL 是否是 NoSQl 系列的子集:

kk

我问这个是因为“不仅”意味着 NoSQL 更大,但仍将 SQL 作为其中的一部分。

另一方面,由于我们无法在 NoSQL 数据库中执行典型的 sql 操作,例如连接,因此 SQL 不是 nosql 的一部分!

我想知道哪个是真的?

nosql rdbms

25
推荐指数
3
解决办法
5887
查看次数

RDBMS 上的“索引”是什么意思?

我像大多数开发人员一样使用索引(主要是……嗯!索引),但我确信有很多微妙的方法可以使用索引来优化数据库。我不确定它是否特定于 DBMS 的任何实现。

我的问题是:什么是如何使用索引的好例子(除了基本的、明显的情况),以及当您在表上指定索引时 DBMS 如何优化其数据库?

rdbms index

21
推荐指数
2
解决办法
4598
查看次数

ROLLBACK 是快速操作吗?

RDBMS 系统是否针对COMMIT操作进行了优化?ROLLBACK操作慢/快多少?为什么?

rdbms performance sql-server-2008 transaction rollback

20
推荐指数
5
解决办法
6982
查看次数

NoSQL 和 RDBMS 在一起?

我想知道是否有任何好的解决方案可以在 NoSQL 数据库中记录数据,然后将它们转换为 RDBMS?

例如,如果您想快速捕获某些数据(如会话日志),但随后又希望能够针对这些数据创建报告。

我最喜欢的数据库是 Postgres,所以如果你的答案与 Postgres 相关,那就太好了。

nosql rdbms

13
推荐指数
1
解决办法
1316
查看次数