我正在搜索一个数据结构,它的工作原理类似于一个分区的apache kafka主题:发件人将始终附加到日记的末尾每个附加的消息都得到一个严格递增的偏移量消息至少会保留一段给定的保留时间消费者可以开始消费任何抵消或最旧或最新的抵消使用消息不会删除它们如果没有合适的现有结构,我将实现它自己,但我宁愿使用现有的东西。
jv4diomz1#
我基于concurrentnavigablemap找到了一个合适的结构:
import java.util.Iterator; import java.util.Map.Entry; import java.util.concurrent.ConcurrentNavigableMap; import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.atomic.AtomicLong; public class Journal<T> { private static final long INITIAL_OFFSET = 0; private AtomicLong nextOffset = new AtomicLong(); private ConcurrentNavigableMap<Long, T> messages = new ConcurrentSkipListMap<>(); public long append(T message) { Long offset = nextOffset.getAndIncrement(); messages.put(offset, message); return offset; } public long getFirstOffset() { Iterator<Long> it = messages.keySet().iterator(); return it.hasNext() ? it.next() : INITIAL_OFFSET; } public Entry<Long, T> getNext(long offset) { return this.messages.higherEntry(offset); } }
gudnpqoy2#
我认为没有这样的现有数据结构,您必须编写自定义逻辑,以便在一定时间后删除元素,根据我的理解,您可以使用任何列表系列的集合,而无需进行任何自定义。
2条答案
按热度按时间jv4diomz1#
我基于concurrentnavigablemap找到了一个合适的结构:
gudnpqoy2#
我认为没有这样的现有数据结构,您必须编写自定义逻辑,以便在一定时间后删除元素,根据我的理解,您可以使用任何列表系列的集合,而无需进行任何自定义。