将图像传递给 Java

Passing images to Java

我正在做一个项目,我从传感器中提取图像并将它们保存到操作系统目录中。我有一个 Java API 用于将图像上传到服务器。

我需要将这些图像和一些其他数据(通常是浮动数据类型)上传到主服务器。

我需要确定一个中间媒介,例如我存储这些图像的数据库,并通过 java 建立连接以上传它们或使用 HDFS。

哪位大神能告诉我,哪个选项最适合存储图像?数据库还是 HDFS?

注意:图片最多15万以后可能会更多。

这完全取决于用例,你可以选择

  1. HDFS :当您想整体读取它们或传输或处理它们以对图像数据进行任何操作并根据处理结果存储或执行其他操作时。简单来说,如果你想做 Map-Reduce 操作。并且在HDFS中读取图像是顺序的,如果你想根据特定的选择标准来执行获取特定的图像,那么它的成本和性能都会受到影响。
  2. 数据库:更适合基于查询的操作,在这种情况下,您想根据特定条件对图像进行查询或 DML 操作,简单地说,WHERE 条件。但这是一个完全耗时的过程,当你想作为一个块来处理时。而且性能显然会很慢,因为你要存储 150,000 张图像

所以我的建议基于需求,你想存储图像作为中间件,最好存储在HDFS本身。

150.000 张图片在今天算不上什么大数目。如果假设每个图像(未压缩)平均为 10 MB,则数据量为 1.5 TB,这应该可以存储在现成的数据库中(使用现成的硬件,即 Linux 带有一些 RAID 磁盘的盒子)比如 postgreSQL。我不是 HDFS 方面的专家,尽管我尝试过与 HDFS 同系列的产品,但我发现它们易于使用,我想如果您正在寻找一种并行化处理的方法,那么您也可以尝试使用 Hadoop 来处理图像.即使这个产品系列很好如果本质上并不真正需要并行化(就像您在 HDFS 中获得的那样),我仍然会使用像 postgreSQL 这样的标准数据库

我认为最好的方法是将您需要的浮点数和图像的元数据保存在数据库中。为了更轻松地搜索和查询以及更轻松地与 Java 进行交互。实际图像最好存储在文件系统中,以减少与数据库之间的转换。我相信一个简单的文件系统就足以满足这种大小的图像。您可能不会使用任何花哨的 HDFS 功能,例如 map reduce 之类的东西。但这取决于你。

所以在这种情况下,如果标准文件系统对您来说不够好,并且您想要更大的东西,那么 HDFS 就是您的选择。所以正确的方法是将两者结合起来。