我需要存储大量有关通过我们的网关路由器(包含时间戳,用户ID,目的地或源IP,字节数等)发送的互联网数据包的数据集。我应该如何储存大量的流量数据以方便检索?
这个数据必须存储一段时间,至少几天。容易检索也应该是可能的。
这样做的好方法是什么?我已经有一些想法:
为每个用户和每天创建一个文件并将每个数据集附加到它。
- 优点:它可能非常快,并且在给定一致的文件布局的情况下数据很容易找到。
- 缺点:不容易看到例如所有用户的所有UDP流量。
使用数据库
- 优势:这是很容易找到与正确的SQL查询的具体数据。
- 缺点:我不确定是否有一个数据库引擎可以有效地处理可能有数亿个数据集的表。
也许可以将两种方法结合使用:对每个用户使用SQLite数据库文件。
- 优点:一个用户在他的文件上使用SQL查询将很容易获得信息。
- 缺点:获取整体信息仍然很困难。
但也许别人有一个非常好的主意?
非常感谢。
你说得对,用户必须能够检查他们造成的流量。 不幸的是,我无法使用SQL Server,因为我们所有的服务器都运行Debian Linux。 前段时间,我在我们的PostgreSQL数据库上写了一个查询来查找没有合同的用户。看起来很简单,找到一个表中的所有条目在另一个表中都没有匹配的条目,这两个表都有5000行以下。但是,生成的查询需要五秒钟才能执行。 这就是为什么我担心数以亿计的数据集的查询。 – 2010-02-26 18:19:05
这听起来像是有人忘了索引你的Postgre数据库!像这样的一个简单的查询这样一个微小的数据集应该采取适当设计的数据库milleseconds。 – HLGEM 2010-02-26 19:13:18