Database 我应该如何存储大量流量数据以便于检索?
对于流量计费系统,我需要存储有关通过网关路由器发送的internet数据包的大量数据集(包含时间戳、用户id、目的地或源ip、字节数等) 这些数据必须存储一段时间,至少几天。也应该可以轻松检索 做这件事的好方法是什么?我已经有了一些想法:Database 我应该如何存储大量流量数据以便于检索?,database,sqlite,storage,Database,Sqlite,Storage,对于流量计费系统,我需要存储有关通过网关路由器发送的internet数据包的大量数据集(包含时间戳、用户id、目的地或源ip、字节数等) 这些数据必须存储一段时间,至少几天。也应该可以轻松检索 做这件事的好方法是什么?我已经有了一些想法: 为每个用户和日期创建一个文件,并将每个数据集附加到该文件中 优点:它可能非常快,并且如果文件布局一致,数据很容易找到 缺点:不容易看到所有用户的所有UDP流量 使用数据库 优点:使用正确的SQL查询很容易找到特定的数据 缺点:我不确定是否有一个数据库引
- 为每个用户和日期创建一个文件,并将每个数据集附加到该文件中
- 优点:它可能非常快,并且如果文件布局一致,数据很容易找到
- 缺点:不容易看到所有用户的所有UDP流量李>
- 使用数据库
- 优点:使用正确的SQL查询很容易找到特定的数据李>
- 缺点:我不确定是否有一个数据库引擎可以有效地处理可能包含数亿个数据集的表
- 也许可以将这两种方法结合起来:为每个用户使用SQLite数据库文件
- 优点:对一个用户的文件使用SQL查询很容易获得信息李>
- 缺点:获取总体信息仍然很困难
非常感谢。我认为正确的答案实际上取决于“数据集”的定义。正如您在问题中提到的,您正在为每个记录存储单独的信息集;时间戳、用户ID、目标ip、源ip、字节数等 SQL Server完全能够处理这种具有数亿条记录的数据存储,没有任何实际困难。当然,这种类型的日志记录需要一些好的硬件来处理,但它不应该太复杂 在我看来,任何其他解决方案都会使报告变得非常困难,从它的声音来看,这是一项重要的要求。首先,在做任何事情之前都要做好准备 你正在做一个数据仓库工作,你需要像处理数据仓库工作一样处理它。你需要仔细阅读这类东西的正确设计模式 [注:数据仓库并不意味着庞大、昂贵或复杂。它意味着星型模式和处理大量从未更新的数据的智能方法。]
您可以在此集市上执行所需的所有SQL查询。大多数查询将转移到
SELECT COUNT(*)
和SELECT SUM(*)
,使用各种groupby
和具有和WHERE
子句进行分组。因此,在这种情况下,您的写操作比读操作要多得多,您希望写操作不会阻止您,并且希望读操作被阻止“相当快”,但并不关键。这是一个典型的商业智能用例
您可能应该使用数据库并将数据存储为“非规范化”模式,以避免复杂的联接和每条记录的多次插入
在这种情况下,您可能正在寻找一些“新颖别致”的NoSQL数据库:它们提供了宽松的ACID约束,在这里您不应该太在意这些约束(在崩溃的情况下,您可以去掉日志的最后几行),但它们的插入性能要好得多,因为它们不必在每次事务中同步磁盘上的日志。你是对的,用户必须能够检查它们造成的流量。不幸的是,我不能使用SQL Server,因为我们所有的服务器都运行Debian Linux。不久前,我在我们的PostgreSQL数据库上编写了一个查询,以查找具有ut是一个契约。在一个表中查找所有条目似乎很简单,而在另一个表中没有匹配的条目,两个表的行数都在5000行以下。但是,结果查询需要5秒钟才能执行。这就是为什么我担心查询数亿个数据集的原因。我觉得好像有人忘记为Postgre编制索引了数据库!在这样一个小的数据集上进行这样一个简单的查询,在一个设计合理的数据库中应该需要数千秒。