繁体   English   中英

在Java中存储带有哈希值的庞大列表的最佳方法

[英]Best way to store a huge list with hashes in Javascript

我有一个包含10.000个条目的列表。

例如

myList = {};
myList[hashjh5j4h5j4h5j4]
myList[hashs54s5d4s5d4sd]
myList[hash5as465d45ad4d]
....

我不使用数组(0,1,2,3),因为我可以非常快速地检查
->此哈希是否存在。

if(typeof myObject[hashjh5j4h5j4h5j4] == 'undefined')
{
  alert('it is new'); 
}
else
{
  alert('old stuff'); 
}

但是我不确定,这是一个好的解决方案吗?
处理具有10.000个条目的对象可能是一个问题吗?

编辑:
我尝试构建一个仅显示新提要的rss提要阅读器。 因此,我从链接(每个新闻都有一个uniqe链接)计算出哈希并将其存储在对象(mongoDB)中。 顺便说一句:10.000个条目不是正常情况(但是有可能)

您可以使用in运算子:

if ('hashjh5j4h5j4h5j4' in myList) { .. }

但是,这对于对象原型链中的成员也将返回true

Object.prototype.foo = function () {};
if ("foo" in myList) { /* will be true */ };

要解决此问题,可以改用hasOwnProperty

if (myList.hasOwnProperty('hashjh5j4h5j4h5j4')) { .. }

尽管您自己可能尚未向Object.prototype添加方法,但不能保证您使用的其他第三方库没有; 顺便说一句,扩展Object.prototype ,因此您不应该这样做。 为什么? ; 因为您不应该修改自己不拥有的东西。

我的建议:

  1. 对手头的任务使用尽可能小的哈希值。 如果要处理数百个可哈希字符串,而不是数十亿,则哈希长度可能会相对较小。
  2. 将散列存储为整数而不是字符串,以避免占用比所需少的空间。
  3. 不要存储为对象,只需将它们存储在一个简单的二进制树log2(keySize)深处。

进一步的想法:

  1. 您可以使用混合方法吗? 对于最近不到一个月的提要,请使用散列,不要麻烦显示一个月以上的项目。 将哈希和日期存储在一起,每天清除旧哈希吗?

10.000是很多。 您可以考虑将散列存储在数据库中,并使用ajax查询它。 查询一个散列可能需要更长的时间,但是页面加载速度更快。

无论如何,这在现代计算机上的现代浏览器中都不是问题。

1万个条目(每个条目占用50个字节)仍将占用少于500KB的内存。

只要将js压缩后,带宽就不会出现问题-但是请尽早提供数据,以免阻塞可见的页面加载性能。

总而言之,除非您希望迎合手机需求,否则您的解决方案就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM