database - 用于存储恶意软件的大型二进制文件的数据库
问题描述
因此,我正在尝试创建一个数据库,该数据库可以存储数千个大小从 kb 到 50 mb 不等的恶意软件二进制文件。我目前正在使用 blob 对 cassandra 进行测试,但当然对于大型 cassandra 处理得不好的文件。有没有人有任何好的想法,可能是一个更好的数据库,或者一个更好的方式来使用 cassandra。我对数据库比较陌生,所以请尽可能详细。谢谢你
解决方案
如果您对 cassandra 有心,您可能希望将 blob 文件存储在 cassandra 之外,因为大文件会导致压缩和修复出现问题。理想情况下,您会将 blob 文件存储在 cassandra 之外的某个网络存储中。那说显然沃尔玛以前确实这样做过
卡桑德拉设置:
CREATE TABLE [IF NOT EXISTS] malware_table (
malware_hash varchar,
filepath varchar,
date_found timestamp,
object blob,
other columns...
PRIMARY KEY (malware_hash, filepath)
我们在这里所做的是基于恶意软件哈希创建一个复合键。所以你可以做到SELECT * FROM malware_table WHERE malware_hash = ?
。如果发生冲突,您需要查看两个文件。此外,此查找将非常快,因为它是键值查找。请记住,cassandra 只能通过主键查询。
由于您过去不太可能更新文件,因此您将希望运行基于大小的压缩。从长远来看,为了更快的查找。这在硬盘空间上会更贵,因为您需要在任何给定时间免费使用 50% 的硬盘。
替代解决方案:
我可能会将其存储在 s3/gcs 或某些网络存储中。创建一个文件夹来表示文件夹的哈希值,然后将文件存储在每个文件夹中。使用 api 来确定文件是否存在。如果这是每秒被击中 1000 次的东西,您可能希望在它前面创建一个缓存层以减少查找时间。对象存储的成本将比 cassandra 集群便宜得多,并且可能会更好地扩展。
推荐阅读
- python - request.form.getlist 给出一个空列表
- hyperledger-fabric - ./byfn.sh -m up -s couchdb -a 失败
- mysql - 表 X 中购买了表 Y 中所有产品的客户 ID 的列表?
- python - 无论如何使python的错误消息停止破坏流程
- puppeteer - 使用 Puppeteer 的 .goto 方法在页面导航之间未保留会话 ID?
- javascript - Javascript 中的循环链接列表同胞游戏
- protractor - 量角器代码中未调用断言
- spring - 如何在 IntelliJ 的 Spring Boot 项目中使用实时编辑
- mfc-feature-pack - CMFCTabCtrl 的活动选项卡关闭按钮
- database - 特定列的数据占用的空间以及对删除该列的影响