Files
2nd/10_Wiki/Topic_Programming/Architecture/Apache Ignite.md
T
Antigravity Agent 9148c358d0 docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를
Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류.

- 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로
  자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거,
  동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거.
- 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming,
  Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business,
  Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로,
  나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는
  title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백).
  원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지.
- 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서.
- 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는
  지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지.
- Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경.
- 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
2026-07-05 00:33:48 +09:00

6.2 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-apache-ignite Apache Ignite 10_Wiki/Topics verified self
Ignite
In-memory data grid
GridGain
none A 0.9 applied
in-memory
data-grid
distributed-cache
sql
compute-grid
2026-05-10 pending
language framework
java Apache Ignite 2.16

Apache Ignite

매 한 줄

"매 distributed in-memory data grid + compute grid + ANSI SQL". 매 GridGain (2007) → Apache Ignite (2014, donated). 매 2026 modern stack 은 Ignite 2.16 (GA mid-2025) / Ignite 3.x (preview, 매 new architecture: RAFT-based, ANSI SQL-first, 매 GridGain 9 commercial). 매 Hazelcast / Redis 의 alternative — 매 SQL + ACID transactions 의 differentiator.

매 핵심

매 features

  • In-memory key-value cache — partitioned (sharded) or replicated.
  • Distributed ANSI-99 SQL — collocated joins, indexes, JDBC/ODBC.
  • ACID transactions — pessimistic / optimistic, distributed two-phase commit.
  • Compute grid — send code to data (Java/.NET/C++).
  • Service grid — deploy stateful services across cluster.
  • Native persistence — durable on-disk (since 2.1, 2017).
  • Streaming — continuous queries, data streamer.

매 architecture

  • Topology: server nodes + client/thin clients.
  • Affinity: rendezvous hashing, partition-to-node assignment.
  • Backup: synchronous/async backups per cache (RF=N).
  • Discovery: TcpDiscoverySpi (multicast / static / Kubernetes / ZooKeeper).
  • Communication: TcpCommunicationSpi.

매 응용

  1. Hot cache layer — in front of Postgres/Oracle, sub-ms reads.
  2. Distributed SQL — operational analytics across shards.
  3. Compute grid — financial risk calc, ML feature scoring at data.
  4. Session storage — JCache (JSR-107) compliant.

💻 패턴

Cache config (Java)

IgniteConfiguration cfg = new IgniteConfiguration();
CacheConfiguration<Long, Order> cc = new CacheConfiguration<>("orders");
cc.setCacheMode(CacheMode.PARTITIONED);
cc.setBackups(1);
cc.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
cc.setWriteSynchronizationMode(CacheWriteSynchronizationMode.PRIMARY_SYNC);
cc.setIndexedTypes(Long.class, Order.class);
cfg.setCacheConfiguration(cc);

Ignite ignite = Ignition.start(cfg);
IgniteCache<Long, Order> orders = ignite.cache("orders");
orders.put(1L, new Order(...));

Distributed SQL

SqlFieldsQuery q = new SqlFieldsQuery(
    "SELECT o.id, c.name FROM \"orders\".Order o " +
    "JOIN \"customers\".Customer c ON o.customerId = c.id " +
    "WHERE o.status = ?")
    .setArgs("paid");
try (var cur = orders.query(q)) {
    for (List<?> row : cur) System.out.println(row);
}

Affinity collocation (cross-cache JOIN performance)

@QuerySqlField(index = true)
private Long customerId;

// Affinity key — rows with same customerId on same node
@AffinityKeyMapped
private Long customerId;
// Now JOIN orders ↔ customers stays node-local

Transaction (pessimistic, repeatable read)

try (Transaction tx = ignite.transactions().txStart(
        TransactionConcurrency.PESSIMISTIC,
        TransactionIsolation.REPEATABLE_READ)) {
    Account from = accounts.get(fromId);
    Account to   = accounts.get(toId);
    if (from.balance < amount) throw new RuntimeException("INSUFFICIENT");
    from.balance -= amount; to.balance += amount;
    accounts.put(fromId, from);
    accounts.put(toId, to);
    tx.commit();
}

Compute grid (broadcast)

ignite.compute().broadcast(() -> {
    System.out.println("Hello from " + ignite.cluster().localNode().id());
});
// Send Lambda — Ignite peer-class-loads to all nodes

Continuous query (CDC-like)

ContinuousQuery<Long, Order> qry = new ContinuousQuery<>();
qry.setLocalListener(events -> {
    for (CacheEntryEvent<? extends Long, ? extends Order> e : events)
        System.out.println("Updated: " + e.getKey() + " → " + e.getValue());
});
qry.setRemoteFilterFactory(() -> e -> e.getValue().getStatus().equals("paid"));
orders.query(qry);

Native persistence

DataStorageConfiguration ds = new DataStorageConfiguration();
ds.getDefaultDataRegionConfiguration().setPersistenceEnabled(true);
ds.setStoragePath("/var/ignite/persistence");
cfg.setDataStorageConfiguration(ds);
// Restart-safe; in-memory speed + durability
ignite.cluster().state(ClusterState.ACTIVE);

Thin client (lightweight, no peer-class-loading)

ClientConfiguration cc = new ClientConfiguration().setAddresses("ignite:10800");
try (IgniteClient c = Ignition.startClient(cc)) {
    ClientCache<Long, Order> orders = c.getOrCreateCache("orders");
    orders.put(1L, new Order(...));
}

매 결정 기준

상황 Tool
Pure key-value cache, simple Redis
K-V + distributed events, JVM Hazelcast
K-V + ANSI SQL + ACID + compute grid Ignite
In-process cache Caffeine
Cloud-native managed ElastiCache / Memorystore / GridGain Cloud

기본값: 매 Redis 매 simple cache, 매 Ignite 매 SQL+ACID+compute integrated, 매 Hazelcast 매 JVM-native event-driven.

🔗 Graph

🤖 LLM 활용

언제: 매 sub-ms latency + SQL + ACID 의 simultaneous requirement, 매 compute-near-data, 매 JVM ecosystem. 언제 X: 매 simple cache only (Redis cheaper), 매 non-JVM stack (limited tooling), 매 small data (<10GB, single node fine).

안티패턴

  • No backups: 매 node loss → data loss. 매 setBackups(≥1).
  • Cross-cache JOIN without affinity: 매 network shuffle, 매 query 의 slow.
  • Synchronous replication everywhere: 매 latency. 매 PRIMARY_SYNC + async backup balance.
  • Mixing partitioned + replicated joins carelessly: 매 broadcast amplification.

🧪 검증 / 중복

  • Verified (Apache Ignite docs 2.16, GridGain documentation, ASF Ignite 3.x roadmap).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — full content (Ignite cache, SQL, transactions, compute grid)