Distributed Data Structures
Ignite allows for most of the data structures from java.util.concurrent
framework to be used in a distributed fashion. For example, you can take
java.util.concurrent.BlockingDeque
and add something to it on one node and
poll it from another node. Or have a distributed ID generator, which would
guarantee uniqueness of IDs on all nodes.
- Concurrent Map (Cache)
- Distributed Queues and Sets
- AtomicLong
- AtomicReference
- AtomicSequence (ID Generator)
- CountDownLatch
- ExecutorService
Ignite ignite = Ignition.ignite(); // Non-colocated queue which will be distributed // across all data nodes. IgniteQueue<String> queue = ignite.queue("queueName", 20, new CollectionConfiguration()); // Add queue elements. for (int i = 0; i < 20; i++) queue.add("Value " + Integer.toString(i)); // Poll queue elements. for (int i = 0; i < 20; i++) System.out.println("Polled value: " + queue.poll());
Ignite ignite = Ignition.ignite(); // Initialize new set. IgniteSet<String> set = ignite.set("setName", null); // Add set elements. for (int i = 0; i < 10; i++) set.add(Integer.toString(i)); // Iterate over set. for (String item : set) System.out.println("Set item: " + item);
Ignite ignite = Ignition.ignite(); // Initialize atomic sequence. IgniteAtomicSequence seq = ignite.atomicSequence("seqName", 0, true); for (int i = 0; i < 100; i++) System.out.println("Next sequence value: " + seq.incrementAndGet());
Ignite ignite = Ignition.ignite(); // Initialize atomic long. IgniteAtomicLong atomicLong = ignite.atomicLong("myAtomicLong", 0, true); for (int i = 0; i < 100; i++) System.out.println("Incremented value: " + atomicLong.incrementAndGet());
Ignite ignite = Ignition.ignite(); String val = "123"; // Initialize distributed atomic reference. IgniteAtomicReference<String> ref = ignite.atomicReference(refName, val, true); ref.compareAndSet(val, "456");
Ignite ignite = Ignition.ignite(); // Initialize distributed count down latch. final IgniteCountDownLatch latch = ignite.countDownLatch(latchName, 10, false, true); IgniteCompute asyncCompute = ignite.compute().withAsync(); // Asynchronously execute closures on the cluster // which will simply count down the latch on remote nodes. for (int i = 0; i < 10; i++) asyncCompute.run(() -> latch.countDown()); // Wait for all closures to complete. latch.await();
Also see data structure examples available on GitHub.
Data Structure Features
Feature | Description |
---|---|
Queue and Set |
Ignite provides an implementation of a fast Distributed Blocking Queue and Distributed Set. |
Collocated vs. Non-Collocated |
Queues and Sets can be deployed in |
Bounded Queues |
Bounded queues allow users to have queues with predefined maximum size which gives a better control over the overall cache capacity. |
Atomic Types |
Ignite supports distributed AtomicLong and AtomicReference. |
CountDownLatch |
Ignite CountDownLatch allows you to synchronize jobs on all Ignite nodes. |
Reservation-based ID Generator |
ID Generator is implemented with |
Semaphore |
Ignite's distributed semaphore implementation and behavior is similar to java.util.concurrent.Semaphore. |