- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个包含几百万个 sha256 哈希文件的数据库。我经常收到数百万个新文件,我必须对照数据库检查这些文件以避免重复。
根据 mysql 数据库检查文件的哈希值需要数年时间。我已经将哈希拆分为 16 个表(0 到 F)。我已经尝试过 couchbase,但这需要超过 8GB 的 RAM,并且中止了导入,剩下几百万个哈希值导致过多的 RAM 使用...
谁能给我一个解决方案,在比 MySQL 更快的数据库中存储大约 4.5GB 的哈希值(当哈希值转储到纯文本文件时计算大小)?
哈希的存储没有任何元信息,没有文件名或路径或 ID 或其他什么。
亲切的问候,3vilc00kie
编辑表定义:
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Erstellungszeit: 31. Januar 2014 um 13:55
-- Server Version: 5.5.8
-- PHP-Version: 5.3.5
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Datenbank: `filehashes`
--
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `0`
--
CREATE TABLE IF NOT EXISTS `0` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `1`
--
CREATE TABLE IF NOT EXISTS `1` (
`sha256` binary(32) NOT NULL,
UNIQUE KEY `sha256` (`sha256`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2`
--
CREATE TABLE IF NOT EXISTS `2` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `3`
--
CREATE TABLE IF NOT EXISTS `3` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `4`
--
CREATE TABLE IF NOT EXISTS `4` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `5`
--
CREATE TABLE IF NOT EXISTS `5` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `6`
--
CREATE TABLE IF NOT EXISTS `6` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `7`
--
CREATE TABLE IF NOT EXISTS `7` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `8`
--
CREATE TABLE IF NOT EXISTS `8` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `9`
--
CREATE TABLE IF NOT EXISTS `9` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `a`
--
CREATE TABLE IF NOT EXISTS `a` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `b`
--
CREATE TABLE IF NOT EXISTS `b` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `c`
--
CREATE TABLE IF NOT EXISTS `c` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `d`
--
CREATE TABLE IF NOT EXISTS `d` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `e`
--
CREATE TABLE IF NOT EXISTS `e` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `f`
--
CREATE TABLE IF NOT EXISTS `f` (
`sha256` binary(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
最佳答案
您可能不需要数据库。
sha256 只有 32 个字节长。我生成了一个包含 5000 万个唯一 sha256 的列表,对它们进行排序,并将它们放入一个文件中(没有对它们进行十六进制编码)。对于非常平衡的二进制排序结构,这是 1.5GB 的 RAM。对于您能找到的几乎所有计算机来说,这应该足够简单。
因此,您所要做的就是读取或映射它,并对您检查的每一个进行二进制搜索。
当 sha1s 的 LinkedIn 数据库泄露时,有一个站点试图通过将所有哈希值放入数据库服务器并让用户通过 Web 请求检查它们来做类似于您在此处所做的事情。
p>它工作不可靠,所以我基本上构建了我上面描述的内容。如果你在这里获取我要点中的代码:https://gist.github.com/dustin/2885182并针对 sha256 进行修改(基本上将哈希大小设置为 32 而不是 20),它应该工作得很好。您可以运行与文件扫描器内联的逻辑,以实现几乎即时的查找。
关于mysql - 针对已存储文件的数百万哈希检查数百万文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21479025/
我正在运行一个辅助角色,并检查 Azure 上托管的存储中是否存在数据。当我将连接字符串用于经典类型的存储时,我的代码可以正常工作,但是当我连接到 V2 Azure 存储时,它会抛出此异常。 “远程服
在我的应用程序的主页上,我正在进行 AJAX 调用以获取应用程序各个部分所需的大量数据。该调用如下所示: var url = "/Taxonomy/GetTaxonomyList/" $.getJSO
大家好,我正在尝试将我的商店导入我的 Vuex Route-Gard。 路由器/auth-guard.js import {store} from '../store' export default
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我的 Windows 计算机上的本地文件夹中有一些图像。我想将所有图像上传到同一容器中的同一 blob。 我知道如何使用 Azure Storage SDKs 上传单个文件BlockBlobServi
我尝试发出 GET 请求来获取我的 Azure Blob 存储帐户的帐户详细信息,但每次都显示身份验证失败。谁能判断形成的 header 或签名字符串是否正确或是否存在其他问题? 代码如下: cons
这是用于编写 JSON 的 NeutralinoJS 存储 API。是否可以更新 JSON 文件(推送数据),而不仅仅是用新的 JS 对象覆盖数据。怎么做到的??? // Javascript
我有一个并行阶段设置,想知道是否可以在嵌套阶段之前运行脚本,所以像这样: stage('E2E-PR-CYPRESS') { when { allOf {
我想从命令行而不是从GUI列出VirtualBox VM的详细信息。我对存储细节特别感兴趣。 当我在GUI中单击VM时,可以看到包括存储部分在内的详细信息: 但是到目前为止,我还没有找到通过命令行执行
我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 来递归检查所有节点及其上游组件,只要上游路径没有 fork
谁能告诉我 jquery data() 在哪里存储数据以及何时删除以及如何删除? 如果我用它来存储ajax调用结果,会有性能问题吗? 例如: $("body").data("test", { myDa
有人可以建议如何为 Firebase 存储中的文件设置备份。我能够备份数据库,但不确定如何为 firebase 存储中的文件(我有图像)设置定期备份。 最佳答案 如何进行 Firebase 存储的本地
我最近开始使用 firebase 存储和 firebase 功能。现在我一直在开发从功能到存储的文件上传。 我已经让它工作了(上传完成并且文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载)
我想只允许用户将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然允许他们删除文件。我添加了以下内容: match /myusers/{userId}/{allPaths=**} { al
使用生命周期管理策略将容器的内容从冷访问层移动到存档。我正在尝试以下策略,希望它能在一天后将该容器中的所有文件移动到存档层,但事实并非如此在职的。我设置了选择标准“一天未使用后”。 这是 json 代
对于连接到 Azure 存储端点,有 http 和 https 两个选项。 第一。 https 会带来开销,可能是 5%-10%,但我不支付同一个数据中心的费用。 第二。 http 更快,但 Auth
有人可以帮我理解这一点吗?我创建了Virtual Machine in Azure running Windows Server 2012 。我注意到 Azure 自动创建了一个存储帐户。当我进入该存
我是一名优秀的程序员,十分优秀!