首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hazelcast keySet流媒体?

Hazelcast keySet流媒体?
EN

Stack Overflow用户
提问于 2017-02-14 21:40:04
回答 2查看 727关注 0票数 1

我刚接触Hazelcast,我正试着用它在一张地图中存储数据,这张地图太大了,一台机器无法容纳它。

我需要实现的过程之一是遍历映射中的每个值,并对它们执行某些操作-而不是累加或聚合,并且我不需要一次查看所有数据,因此不需要考虑内存问题。

我的简单实现是使用IMap.keySet(),然后迭代所有键,依次获得每个存储值(并允许值在处理后为GCed ),但我担心的是,系统中将有如此多的数据,以至于即使只是获得键的列表也会足够大,从而给系统带来不必要的压力。

我希望有一个流式API,我可以以这样的方式流式传输关键字(甚至完整的条目),这样本地节点就不必在本地缓存整个集合-但在文档中找不到任何与我相关的内容。

如果您能提出任何建议,我将不胜感激。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-02-15 21:39:13

Hazelcast Jet提供了分布式版本的j.u.s,并为IMap添加了«streaming»功能。它允许在Hazelcast群集上执行Java Streams API。

代码语言:javascript
复制
import com.hazelcast.jet.JetInstance;
import com.hazelcast.jet.stream.DistributedCollectors;
import com.hazelcast.jet.stream.IStreamMap;
import com.hazelcast.jet.stream.IStreamList;

import static com.hazelcast.jet.stream.DistributedCollectors.toIList;

    final IStreamMap<String, Integer> streamMap = instance1.getMap("source");
    // stream of entries, you can grab keys from it
    IStreamList<String> counts = streamMap.stream()
                    .map(entry -> entry.getKey().toLowerCase())
                    .filter(key -> key.length() >= 5)
                    .sorted()
                    // this will store the result on cluster as well
                    // so there is no data movement between client and cluster
                    .collect(toIList());

请查找有关jet here和更多示例here的更多信息。

干杯,维克

票数 1
EN

Stack Overflow用户

发布于 2017-03-09 16:52:51

虽然Hazelcast Jet stream的实现看起来令人印象深刻,但我没有太多时间考虑升级到Hazelcast Jet (在我们几乎是沼泽标准的vert.x设置中)。取而代之的是,我使用了IMap.executeOnEntries,它似乎和@Vik Gamov为Hazelcast Jet所做的细节是一样的,只是语法更烦人。

我的例子:

代码语言:javascript
复制
myMap.executeOnEntries(new EntryProcessor<String,MyEntity>(){
    private static final long serialVersionUID = 1L;
    @Override
    public Object process(Entry<String, MyEntity> entry) {
        entry.getValue().fondle();
        return null;
    }
    @Override
    public EntryBackupProcessor<String, MyEntity> getBackupProcessor() {
        return null;
    }});

如您所见,语法非常烦人:

  1. 我们需要创建一个实际的对象,它可以被序列化到集群中-这里没有花哨的lambda (如果你复制粘贴它,就不要使用我的序列ID -它是被设计破坏的)。
  2. 它不能是lambda的一个原因是接口不起作用-你需要另一个方法来处理备份副本(或者至少声明你不想像我一样处理它们),虽然我强调了它的重要性,它在任何时候都不重要,我猜在罕见的cases.
  3. Obviously中唯一重要的是你不能(或者至少它不是微不足道的)从过程中返回数据-这在我的情况下并不重要,但仍然很重要。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42227680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档