使数百万个小型二进制文件始终可用于测试的最佳解决方案是什么?

What's the best solution for making millions of small binaries available for testing consistently?

我们正在为验证系统开发生物识别匹配解决方案。您可能知道,生物特征数据的主要问题之一是它们是非结构化二进制文件,每个生物特征细节都必须与整个细节数据库相匹配。

因此,我们正在寻找一种快速且合适的解决方案来消除物理硬盘的二进制检索 (I/O) 延迟,并通过使所有二进制记录可用于新的匹配请求来减少开销.

目前,我们的解决方案是使用具有缓存机制的内存数据库,如Redis。该解决方案的问题在于,如果生物识别细节二进制文件的数量如此之多,内存 (RAM) 的大小就会变得非常大。我们正在寻找一种解决方案,使所有二进制文件对我们的匹配应用程序高度可用。

请注意,通常每个生物特征细节都不到 5 KB,而我们有数百万条生物特征细节记录。

您可以结合使用内存数据库和基于磁盘的数据库来存储数百万个细节。

您可以将所有细节存储在任何基于磁盘的数据库中,例如 MySQL、PostgreSQL 或任何其他数据库。

细节数据将分布在三个不同的数据存储中。

  • 应用程序缓存(本地缓存)
  • 内存数据库(Memcache、Redis 等)
  • 基于磁盘的数据库(MySQL、MongoDB 等)

假设您在设置中使用 Redis 和 MySQL。

您的代码应首先在应用程序缓存中搜索细节,如果未找到,则应在 Redis 中搜索以查看它是否可用,如果找到,则将其存储在本地缓存中 到期.

即使 Redis 中没有数据,您也应该在 MySQL 数据库中搜索并将其取回。如果找到,则应将相同的数据存储在 Redis 中 with expiry.

使用过期可以避免所有对象同时存在于内存中。

假设现在您不想使用过期时间,因为您总是需要所有细节。在这种情况下,您可以增加 Redis 实例的大小或使用 Redis 集群。作为替代方案,可以使用 Hazelcast、Apache Ignite 等 IMDG(内存数据网格)来存储所有细节。如果您不喜欢使用如此复杂的设置,那么您应该考虑使用内存数据库,如 Sap Hana、MemSQL 等。