Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 何时点击数据库而不是搜索列表中的对象_Java_Database_Algorithm - Fatal编程技术网

Java 何时点击数据库而不是搜索列表中的对象

Java 何时点击数据库而不是搜索列表中的对象,java,database,algorithm,Java,Database,Algorithm,如果我们使用MongoDB(NoSQL)或MySQL(Relational DB)来检索对象,并且我们想要搜索特定元素(where子句),但是我们已经有了一个内存中的列表(LinkedList、ArrayList或其他任何东西),其中包含一些对象,无论是用于缓存还是出于任何其他原因 当使用内存中的结构进行检索而不是查询数据库更便宜时,是否有一个公式/库可以提供“建议”?(例如,考虑到内存列表的大小?查询内存缓存总是比较便宜的 唯一的例外是,如果您构建了缓存,因此搜索它的效率非常低(例如,线性搜索

如果我们使用MongoDB(NoSQL)或MySQL(Relational DB)来检索对象,并且我们想要搜索特定元素(where子句),但是我们已经有了一个内存中的列表(LinkedList、ArrayList或其他任何东西),其中包含一些对象,无论是用于缓存还是出于任何其他原因


当使用内存中的结构进行检索而不是查询数据库更便宜时,是否有一个公式/库可以提供“建议”?(例如,考虑到内存列表的大小?

查询内存缓存总是比较便宜的

唯一的例外是,如果您构建了缓存,因此搜索它的效率非常低(例如,线性搜索)。但只要它是一个基于散列的结构,它最糟糕的情况就是做数据库需要做的事情,但没有网络开销。在哈希表中查找某些内容基本上是免费的


更大的问题是,缓存是否占用了太多内存,以致于应用程序的其余部分无法使用。为了避免这种情况,您需要一个弱哈希映射或类似的映射。如果这是某种ORM生成的缓存,那么它已经被弱引用了。

在地图中存储数据会让事情变得更快,如果可能的话。是的,我同意,但在某些情况下,我认为查询数据库会更便宜。我对此表示怀疑。在几乎所有可能的用例中查询内存中的对象都会更快。事实上,有如此多的用例,我怀疑您是否会看到性能的显著提高。我想不出哪种情况下命中磁盘会比读取内存更快。您想访问磁盘的唯一可能原因是您的缓存已过期,需要刷新。即使它包含数百万个对象且没有索引?@salamis如果它是某种哈希表,则是。但是如果它在哈希表中,则它有一个索引@salamis指出,他可用的数据结构没有索引。如果我有一个名、姓、出生日期、id的person对象,最好创建一个哈希表,索引中包含名、姓、id的组合,例如?并查询哈希表而不是查询数据库?如果您能够在不再次查询数据库的情况下复制相同的键,则是。