PageSourceSearch

https://www.kinetica.com/assets/index-DegpveJv.js

js kinetica.com collected 2026-09-24 20:11:51 UTC 29,390 bytes, 7 lines download raw bytes

1import{j as e,a as w}from"./index-CCbjxSDg.js";import{L as v,r as N}from"./vendor-BH4DxC9-.js";import{H as k,a as S}from"./HeroFigure-DY1xAmb5.js";import"./purify.es-Bc-0F0ao.js";import{S as A,A as o}from"./SerifHeading-bNhAmdCt.js";import{L as P}from"./LimeGlow-Cq-KIZtM.js";import"./CodePanel-B4W90WMJ.js";import{F as L}from"./FeatureChip-BUluipsx.js";import{C as T}from"./CtaLink-CA8j17-z.js";import{D as O}from"./DiagramCard-BfrcIdOa.js";import{S as d}from"./SectionHeader-B0PZO4mU.js";import{S as E}from"./SegmentedTabs-uVKUoERP.js";import{C as G}from"./CrossLink-BfGTN160.js";import{F as _}from"./FinalCta-rF39yFtK.js";import{F as R}from"./FaqSection-CY79GavH.js";import"./icons-CPzQQ5QY.js";import"./Button-DozEmmz-.js";import"./Pill-CoMH70Z4.js";const g="#a78bfa",y="#4dd9d0",p=[{x:120,y:352},{x:180,y:272},{x:252,y:300},{x:308,y:212},{x:360,y:128}],f="M120 352 L180 272 L252 300 L308 212 L360 128",$="86,180 210,120 392,108 416,262 330,368 150,392 74,300",C=[{x:92,y:212},{x:160,y:180},{x:310,y:330},{x:388,y:240},{x:96,y:320}],M=[{x:76,y:120},{x:150,y:96},{x:240,y:80},{x:410,y:64},{x:220,y:412},{x:360,y:400},{x:46,y:388}],D=[{x1:120,y1:352,x2:96,y2:320},{x1:96,y1:320,x2:92,y2:212},{x1:92,y1:212,x2:160,y2:180},{x1:160,y1:180,x2:180,y2:272},{x1:160,y1:180,x2:308,y2:212},{x1:252,y1:300,x2:310,y2:330},{x1:310,y1:330,x2:388,y2:240},{x1:388,y1:240,x2:360,y2:128},{x1:76,y1:120,x2:150,y2:96},{x1:150,y1:96,x2:240,y2:80},{x1:150,y1:96,x2:160,y2:180},{x1:240,y1:80,x2:360,y2:128},{x1:360,y1:128,x2:410,y2:64},{x1:310,y1:330,x2:360,y2:400},{x1:120,y1:352,x2:220,y2:412},{x1:96,y1:320,x2:46,y2:388}],B=["0s","-1.7s"],H=()=>{const t=p[0],s=p[p.length-1];return e.jsxs("svg",{viewBox:"0 0 460 470",xmlns:"http://www.w3.org/2000/svg",className:"block h-auto w-full",children:[D.map(a=>e.jsx("line",{x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2,stroke:"rgba(255,255,255,0.12)",strokeWidth:"1"},`${a.x1}-${a.y1}-${a.x2}-${a.y2}`)),e.jsx("polygon",{points:$,fill:"none",stroke:"rgba(167,139,250,0.35)",strokeWidth:"1",strokeDasharray:"4 5"}),e.jsx("text",{x:"300",y:"100",textAnchor:"middle",className:"font-mono",fontSize:"9",letterSpacing:"0.08em",fill:"rgba(167,139,250,0.7)",children:"WHERE score > 0.9"}),C.map(a=>e.jsx("circle",{cx:a.x,cy:a.y,r:"2.5",fill:"#ffffff",opacity:"0.4"},`${a.x}-${a.y}`)),M.map(a=>e.jsx("circle",{cx:a.x,cy:a.y,r:"2.5",fill:"#ffffff",opacity:"0.15"},`${a.x}-${a.y}`)),e.jsx("path",{d:f,fill:"none",stroke:"rgba(167,139,250,0.75)",strokeWidth:"1.4"}),p.slice(1,-1).map(a=>e.jsx("circle",{cx:a.x,cy:a.y,r:"3",fill:g,opacity:"0.85"},`${a.x}-${a.y}`)),e.jsx("circle",{cx:t.x,cy:t.y,r:"7",fill:"none",stroke:"rgba(167,139,250,0.35)",strokeWidth:"1"}),e.jsx("circle",{cx:t.x,cy:t.y,r:"3.5",fill:g}),e.jsx("circle",{cx:s.x,cy:s.y,r:"11",fill:"rgba(167,139,250,0.16)",className:"arch-pulse"}),e.jsx("circle",{cx:s.x,cy:s.y,r:"7",fill:"none",stroke:"rgba(167,139,250,0.35)",strokeWidth:"1"}),e.jsx("circle",{cx:s.x,cy:s.y,r:"4",fill:g,style:{filter:"drop-shadow(0 0 6px rgba(167,139,250,0.8))"}}),e.jsx("text",{x:"60",y:"432",className:"font-mono",fontSize:"9.5",letterSpacing:"0.08em",fill:"rgba(255,255,255,0.35)",children:"SOLVE · SHORTEST PATH"}),e.jsx("g",{className:"motion-only",children:B.map(a=>e.jsx("circle",{r:"3",fill:y,style:{filter:`drop-shadow(0 0 4px ${y})`},children:e.jsx("animateMotion",{dur:"3.4s",repeatCount:"indefinite",begin:a,path:f})},a))})]})},z={parent:"Capabilities",parentHref:"/",current:"Graph"},W="Graph queries that",Q="see your whole table.",I=[{label:"Graph",lead:!0},{label:"Distributed"},{label:"SQL"},{label:"Hybrid"}],K="One grammar for geospatial, social, and property graphs. Topology stored in fixed memory. Traversals restricted by the same SQL you write on the rest of your data — no copy, no sync, no second engine.",F={label:"Start Free",href:"/kinetica-developer-edition"},q="Solve · Match · Query — all in standard SQL",U={id:"FIG. 06",label:"SQL-restricted traversal",sub:"one table · one grammar · no second engine"},r={breadcrumb:z,headlinePart1:W,headlineAccent:Q,categoryChips:I,subtitle:K,ctaPrimary:F,meta:q,figure:U},Y=()=>e.jsxs("section",{className:"relative overflow-hidden px-6 pb-14 pt-16 md:px-10 md:pb-16 md:pt-20",children:[e.jsx(P,{position:"top-right"}),e.jsxs("div",{className:`relative mx-auto max-w-[1280px] ${k}`,children:[e.jsx(S,{caption:r.figure,accent:"#a78bfa",children:e.jsx(H,{})}),e.jsxs("nav",{"aria-label":"Breadcrumb",className:"mb-7 font-mono text-[12px] uppercase tracking-[0.06em] text-white/35",children:[e.jsx(v,{to:r.breadcrumb.parentHref,className:"hover:text-white/60",children:r.breadcrumb.parent}),e.jsx("span",{className:"mx-2.5 opacity-50",children:"/"}),e.jsx("span",{className:"text-[#a78bfa]",children:r.breadcrumb.current})]}),e.jsxs(A,{size:"hero",className:"mb-8",children:[r.headlinePart1," ",e.jsx(o,{children:r.headlineAccent})]}),e.jsx("div",{className:"mb-7 inline-flex flex-wrap gap-1.5 rounded-full border border-white/[0.08] bg-white/[0.02] p-1.5",children:r.categoryChips.map(t=>e.jsx(L,{lead:t.lead,children:t.label},t.label))}),e.jsx("p",{className:"mb-9 max-w-[580px] text-[19px] leading-[1.55] text-white/65",children:r.subtitle}),e.jsxs("div",{className:"flex flex-wrap items-center gap-6",children:[e.jsx(T,{to:r.ctaPrimary.href,arrow:!0,children:r.ctaPrimary.label}),e.jsx("span",{className:"font-mono text-[12px] tracking-[0.06em] text-white/35",children:r.meta}
1)]})]})]}),V={label:"The Category"},X="Stop choosing between graph speed and analytical breadth — ",Z="keep the graph beside your data, not on a copy.",J="",ee=[{id:"a",label:"Dedicated graph DB"},{id:"b",label:"Graph extension"},{id:"c",label:"Native hybrid (Kinetica)",lead:!0,badge:"Best fit"}],te={a:{examples:"Neo4j · TigerGraph · DuckPGQ",headlinePart1:"Built for traversal —",headlineAccent:"but it lives apart from your data.",description:"Fastest at pure-graph workloads when the graph is static. The cost: topology is a copy, attributes are duplicated or streamed in via hooks, and joins back to relational data live in application code or batch jobs. Single-node engines (DuckPGQ-class) cap at one machine's memory.",prosCons:[{kind:"plus",text:"High traversal performance on static graphs"},{kind:"minus",text:"Explicit duplication; attributes must be synced"},{kind:"minus",text:"No native OLAP — analytics happen elsewhere"},{kind:"minus",text:"Single-node ceiling — no distribution past one host"}]},b:{examples:"Apache AGE · Postgres",headlinePart1:"A graph layer",headlineAccent:"bolted onto a row store.",description:"Traversals run on row-oriented storage and a planner built for OLTP. Convenient if you're already on Postgres and your queries are light — but the row store is the ceiling the moment the workload turns analytical, and graph and SQL are optimized by separate machinery.",prosCons:[{kind:"plus",text:"Lives inside a database you already run"},{kind:"minus",text:"Row-store storage — no columnar scan, no GPU"},{kind:"minus",text:"Bolt-on planner — graph and SQL optimized separately"},{kind:"minus",text:"Analytical load hits the OLTP ceiling fast"}]},c:{examples:"Kinetica",headlinePart1:"The graph is",headlineAccent:"a view over your tables.",description:"Graph topology, relational columns, and OLAP aggregation share one columnar, GPU-accelerated engine and one query planner. Traversals are table functions; filters are the same SQL you write on any table. Nothing is copied, nothing is synced, and the graph scales across hosts.",prosCons:[{kind:"plus",text:"Columnar + GPU under both graph and OLAP"},{kind:"plus",text:"One planner — traversal and aggregation compose"},{kind:"plus",text:"No copy, no sync — the graph reads live tables"},{kind:"plus",text:"Distributes past a single node"}]}},i={eyebrow:V,titlePart1:X,titleAccent:Z,lede:J,tabs:ee,panels:te},ae=({kind:t,text:s})=>{const a=t==="plus",j=a?"bg-[#b5ff3d]/[0.18] text-[#b5ff3d] ring-1 ring-[#b5ff3d]/60":"bg-[#ff6b3d]/[0.18] text-[#ff6b3d] ring-1 ring-[#ff6b3d]/60";return e.jsxs("div",{className:"flex items-start gap-3 text-[13px] leading-[1.5] text-white/75",children:[e.jsx("span",{"aria-hidden":"true",className:`mt-[2px] inline-flex h-[18px] w-[18px] shrink-0 items-center justify-center rounded-full font-mono text-[12px] font-semibold leading-none ${j}`,children:a?"+":"−"}),e.jsx("span",{children:s})]})},se=()=>e.jsxs("svg",{viewBox:"0 0 320 200",xmlns:"http://www.w3.org/2000/svg",className:"block h-auto w-full",role:"img","aria-label":"Dedicated graph DB: a purple 'your data stack' box (tables, analytics, ML) and an orange 'graph DB' box (topology copy, traversal only) are linked by an ETL/sync line — two systems with explicit data duplication.",children:[e.jsx("rect",{x:"14",y:"54",width:"120",height:"104",rx:"8",fill:"rgba(167,139,250,0.06)",stroke:"#a78bfa",strokeWidth:"1"}),e.jsx("text",{x:"74",y:"82",textAnchor:"middle",className:"font-mono",fontSize:"10",fill:"#a78bfa",children:"YOUR DATA STACK"}),e.jsx("text",{x:"74",y:"106",textAnchor:"middle",className:"font-mono",fontSize:"8",fill:"#6b6b73",children:"tables"}),e.jsx("text",{x:"74",y:"124",textAnchor:"middle",className:"font-mono",fontSize:"8",fill:"#6b6b73",children:"analytics"}),e.jsx("text",{x:"74",y:"142",textAnchor:"middle",className:"font-mono",fontSize:"8",fill:"#6b6b73",children:"ML"}),e.jsx("rect",{x:"186",y:"54",width:"120",height:"104",rx:"8",fill:"rgba(255,107,61,0.06)",stroke:"#ff6b3d",strokeWidth:"1"}),e.jsx("text",{x:"246",y:"82",textAnchor:"middle",className:"font-mono",fontSize:"10",fill:"#ff6b3d",children:"GRAPH DB"}),e.jsx("text",{x:"246",y:"106",textAnchor:"middle",className:"font-mono",fontSize:"8",fill:"#6b6b73",children:"topology copy"}),e.jsx("text",{x:"246",y:"124",textAnchor:"middle",className:"font-mono",fontSize:"8",fill:"#6b6b73",children:"traversal only"}),e.jsx("line",{x1:"134",y1:"106",x2:"186",y2:"106",stroke:"#ff6b3d",strokeWidth:"1",strokeDasharray:"4 3",opacity:"0.7"}),e.jsx("text",{x:"160",y:"98",textAnchor:"middle",className:"font-mono",fontSize:"8",fill:"#ff6b3d",children:"ETL · sync"}),e.jsx("text",{x:"160",y:"184",textAnchor:"middle",className:"font-mono",fontSize:"9",fill:"#6b6b73",children:"two systems · explicit data duplication"})]}),re=()=>e.jsxs("svg",{viewBox:"0 0 320 200",xmlns:"http://www.w3.org/2000/svg",className:"block h-auto w-full",role:"img","aria-label":"Graph extension: a dashed 'graph layer (AGE)' box bolted on top of a larger orange 'row store (Postgres)' box — one store with an OLTP planner and n
1o columnar scan.",children:[e.jsx("rect",{x:"80",y:"40",width:"160",height:"120",rx:"8",fill:"rgba(255,107,61,0.05)",stroke:"#ff6b3d",strokeWidth:"1"}),e.jsx("text",{x:"160",y:"66",textAnchor:"middle",className:"font-mono",fontSize:"10",fill:"#ff6b3d",children:"ROW STORE (POSTGRES)"}),e.jsx("rect",{x:"104",y:"84",width:"112",height:"54",rx:"6",fill:"rgba(167,139,250,0.06)",stroke:"#a78bfa",strokeWidth:"0.9",strokeDasharray:"3 2"}),e.jsx("text",{x:"160",y:"106",textAnchor:"middle",className:"font-mono",fontSize:"9",fill:"#a78bfa",children:"graph layer (AGE)"}),e.jsx("text",{x:"160",y:"122",textAnchor:"middle",className:"font-mono",fontSize:"8",fill:"#6b6b73",children:"bolted on top"}),e.jsx("text",{x:"160",y:"180",textAnchor:"middle",className:"font-mono",fontSize:"9",fill:"#6b6b73",children:"one store · OLTP planner · no columnar scan"})]}),ne=()=>e.jsxs("svg",{viewBox:"0 0 320 200",xmlns:"http://www.w3.org/2000/svg",className:"block h-auto w-full",role:"img","aria-label":"Native hybrid (Kinetica): one columnar, GPU-accelerated engine where relational, graph, and OLAP share a single planner — no copy, no second engine.",children:[e.jsx("rect",{x:"40",y:"40",width:"240",height:"120",rx:"10",fill:"rgba(181,255,61,0.05)",stroke:"#b5ff3d",strokeWidth:"1.2"}),e.jsx("text",{x:"160",y:"64",textAnchor:"middle",className:"font-mono",fontSize:"10",fill:"#b5ff3d",children:"ONE ENGINE · COLUMNAR + GPU"}),e.jsx("text",{x:"96",y:"104",textAnchor:"middle",className:"font-mono",fontSize:"9",fill:"#4dd9d0",children:"relational"}),e.jsx("text",{x:"160",y:"104",textAnchor:"middle",className:"font-mono",fontSize:"9",fill:"#a78bfa",children:"graph"}),e.jsx("text",{x:"224",y:"104",textAnchor:"middle",className:"font-mono",fontSize:"9",fill:"#b5ff3d",children:"OLAP"}),e.jsx("line",{x1:"70",y1:"116",x2:"250",y2:"116",stroke:"#b5ff3d",strokeOpacity:"0.3"}),e.jsx("text",{x:"160",y:"140",textAnchor:"middle",className:"font-mono",fontSize:"9",fill:"#6b6b73",children:"one planner · no copy · no second engine"})]}),oe={a:e.jsx(se,{}),b:e.jsx(re,{}),c:e.jsx(ne,{})},ie=({panel:t})=>e.jsxs("div",{children:[e.jsx("div",{className:"font-mono text-[10px] uppercase tracking-[0.08em] text-white/40",children:t.examples}),e.jsxs("h4",{className:"mb-3 mt-2 max-w-[60ch] text-[22px] font-[family-name:var(--font-serif)] font-normal leading-[1.25] text-white",children:[t.headlinePart1," ",e.jsx(o,{children:t.headlineAccent})]}),e.jsx("p",{className:"m-0 max-w-[68ch] text-[14px] leading-[1.55] text-white/65",children:t.description}),e.jsx("div",{className:"mt-6 grid gap-3 border-t border-white/[0.08] pt-6",children:t.prosCons.map(s=>e.jsx(ae,{kind:s.kind,text:s.text},s.text))})]}),le=()=>{const[t,s]=N.useState(i.tabs[0].id),a=i.panels[t];return e.jsx("section",{className:"border-t border-white/[0.08] px-6 pb-20 pt-12 md:px-10 md:pb-24 md:pt-14",children:e.jsxs("div",{className:"mx-auto max-w-[1280px]",children:[e.jsxs(d,{eyebrow:i.eyebrow.label,lede:i.lede,className:"mb-14",children:[i.titlePart1," ",e.jsx(o,{children:i.titleAccent})]}),e.jsxs(O,{children:[e.jsx(E,{tabs:i.tabs,active:t,onChange:s,ariaLabel:"Graph database architectures",className:"mb-10"}),e.jsxs("div",{role:"tabpanel",className:"grid gap-10 lg:grid-cols-[minmax(0,5fr)_minmax(0,7fr)] lg:items-center lg:gap-12",children:[e.jsx("div",{className:"flex items-center justify-center rounded-xl border border-white/[0.06] bg-white/[0.012] p-5",children:oe[t]}),e.jsx(ie,{panel:a})]})]})]})})},ce={label:"The Query Surface"},de="Cypher you already know. SQL you already write.",he="One planner.",xe="Kinetica is GQL-compliant and supports Cypher in full — the patterns your team writes against Neo4j port over unchanged. Wrap any match in GRAPH_TABLE() and it becomes a table-valued function: GROUP BY, window functions, joins, and OLAP aggregates compose with graph traversal in a single SQL statement.",m={eyebrow:ce,titlePart1:de,titleAccent:he,lede:xe},n=({children:t})=>e.jsx("span",{className:"font-medium text-[#a78bfa]",children:t}),b=({children:t})=>e.jsx("span",{className:"text-[#b5ff3d]",children:t}),pe=({children:t})=>e.jsx("span",{className:"text-[#4dd9d0]",children:t}),me=({children:t})=>e.jsx("span",{className:"text-[#b5ff3d]",children:t}),be=()=>e.jsxs("pre",{className:"m-0 overflow-x-auto whitespace-pre font-mono text-[13px] leading-[1.7] text-white/75",children:[e.jsx(n,{children:"SELECT"})," person, bank, ",e.jsx(b,{children:"SUM"}),"(amount), ",e.jsx(b,{children:"MAX"}),`(risk_score)
2`,e.jsx(n,{children:"FROM"})," ",e.jsx(b,{children:"GRAPH_TABLE"}),`(
3    `,e.jsx(n,{children:"GRAPH"})," ",e.jsx(pe,{children:"expero.banking_graph"}),`
4    `,e.jsx(n,{children:"MATCH"})," (a:bank)-[:performed]->(b:wire_message ",e.jsx(n,{children:"WHERE"})," b.risk_score > ",e.jsx(me,{children:"20"}),`)
5          -[:is_for_transaction]->(c:banking_transaction)
6    `,e.jsx(n,{children:"RETURN"})," g.party_name ",e.jsx(n,{children:"AS"})," person, a.bank_name ",e.jsx(n,{children:"AS"}),` bank, c.amount, b.risk_score
7) `,e.jsx(n,{children:"GROUP BY"})," person, bank ",e.jsx(n,{children:"ORDER BY"})," ",e.jsx(b,{children:"SUM"}),"(amount) ",e.jsx(n,{children:"DESC"}),";"]}),ge=()=>e.jsx("section",{className:"section-y border-t border-white/[0.08] px-6 md:px-10",children:e.jsxs("div",{className:"mx-auto max-w-[1280px]",children:[e.jsxs(d,{eyebrow:m.eyebrow.label,lede:m.lede,className:"mb-14",children:[m.titlePart1," ",e.jsx(o,{children:m.titleAccent})]}),e.jsx("div",{className:"overflow-x-auto rounded-2xl border border-white/[0.08] bg-[#131318] p-6 md:p-8",children:e.jsx(be,{})})]})}),ye={label:"The Live Graph"},fe="O(1) upserts mean your graph",ue="never falls behind",je="your data.",we="Edge insert and delete are pointer operations, so source-table changes propagate to the graph topology in constant time. Turn on add_table_monitor and the graph stays in sync with your CDC stream, your Kafka feed, your trickle-load — no batch rebuild, no nightly reload, no stale topology.",ve=[{ax:"CSR-based engines",body:"Batch reload window. Topology lags ingest. Streaming graphs require external rebuild jobs."},{ax:"Kinetica · DLS",body:"Graph queries while you ingest. No rebuild window. No stale topology — the graph follows the tables, the tables follow the stream."},{ax:"Who it's for",body:"AML wire-tracing · real-time fraud rings · fleet & IoT telemetry · supply-chain visibility · social-network freshness."}],c={eyebrow:ye,titlePart1:fe,titleAccent:ue,titlePart2:je,lede:we,cards:ve},Ne=()=>e.jsx("section",{className:"section-y border-t border-white/[0.08] px-6 md:px-10",children:e.jsxs("div",{className:"mx-auto max-w-[1280px]",children:[e.jsxs(d,{eyebrow:c.eyebrow.label,lede:c.lede,className:"mb-14",children:[c.titlePart1," ",e.jsx(o,{children:c.titleAccent})," ",c.titlePart2]}),e.jsx("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:c.cards.map(t=>e.jsxs("div",{className:"flex flex-col rounded-2xl border border-white/[0.08] bg-[#131318] p-6 transition-colors duration-200 hover:border-[#5a7a1d] hover:bg-[#17171c] md:p-7",children:[e.jsx("div",{className:"mb-3 font-mono text-[11px] uppercase tracking-[0.1em] text-[#b5ff3d]",children:t.ax}),e.jsx("p",{className:"m-0 text-[15px] leading-[1.6] text-white/70",children:t.body})]},t.ax))})]})}),ke={label:"The Toolkit"},Se="Solve. Match. Query.",Ae="Every operator",Pe="your workload needs.",Le="Generic solvers (shortest path, PageRank, centrality), purpose-built matchers (supply-demand MILP, HMM map-matching, fraud-ring loops), and label-aware traversals with OLAP filters — four of them patented Kinetica research, all callable in SQL.",Te=[{id:"solve",name:"Solve",endpoint:"/solve/graph",description:"Network-agnostic algorithms on any graph: shortest paths, TSP, backhaul routing, PageRank, centrality, all-paths enumeration.",fns:"shortest_path · multiple_routing · page_rank · centrality · inverse_shortest_path"},{id:"match",name:"Match",endpoint:"/match/graph",description:"Higher-order solvers for routing, fraud, scheduling, and supply chain. Patented algorithms anchor this family.",fns:"match_supply_demand · map_matching HMM · loops (fraud rings) · clusters (Louvain · RSB) · batch_solves"},{id:"query",name:"Query",endpoint:"/query/graph",description:"Hop-based pattern queries with node and edge labels. Restrictions reference any column on any table — even columns the graph has never seen.",fns:"adjacency · pattern_matching · hop-based query · OLAP column expressions inside traversal"}],Oe=[{id:"graph-rag",to:"/tools/graph-rag",badge:"OSS",title:"Build a knowledge graph from text",description:"GraphRAG (kgr) — an LLM induces the ontology as documents arrive."},{id:"embedding-method",to:"https://arxiv.org/abs/2407.15906",title:"Read the embedding method",description:"How graph node vectors are built and tuned — arXiv:2407.15906."}],l={eyebrow:ke,titlePart1:Se,titleAccent:Ae,titlePart2:Pe,lede:Le,cards:Te,crossLinks:Oe},Ee=e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"#b5ff3d",strokeWidth:"1.6",className:"h-5 w-5",children:[e.jsx("path",{d:"M5 7h6M5 11h10M5 15h7"}),e.jsx("circle",{cx:"18",cy:"8",r:"2.2"}),e.jsx("circle",{cx:"19",cy:"15",r:"2.2"}),e.jsx("path",{d:"M16 9l-2 5"})]}),Ge=e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"#a78bfa",strokeWidth:"1.6",className:"h-5 w-5",children:[e.jsx("path",{d:"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"}),e.jsx("path",{d:"M14 3v5h5"}),e.jsx("path",{d:"M9 13h6M9 16h4"})]}),_e={"graph-rag":Ee,"embedding-method":Ge},Re=e.jsx("span",{className:"rounded-md border border-[#5a7a1d] bg-[#b5ff3d]/10 px-1.5 py-0.5 font-mono text-[10px] font-semibold uppercase tracking-[0.08em] text-[#b5ff3d]",children:"OSS"}),$e=()=>e.jsx("section",{className:"section-y border-t border-white/[0.08] px-6 md:px-10",children:e.jsxs("div",{className:"mx-auto max-w-[1280px]",children:[e.jsxs(d,{eyebrow:l.eyebrow.label,lede:l.lede,className:"mb-14",children:[l.titlePart1," ",e.jsx(o,{children:l.titleAccent})," ",l.titlePart2]}),e.jsx("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:l.cards.map(t=>e.jsxs("div",{className:"flex flex-col rounded-2xl border border-white/[0.08] bg-[#131318] p-6 transition-colors duration-200 hover:border-[#5a7a1d] hover:bg-[#17171c] md:p-7",children:[e.jsx("div",{className:"font-mono text-[11px] uppercase tracking-[0.1em] text-[#b5ff3d]",children:t.endpoint}),e.jsx("h4",{className:"m-0 mb-2 mt-3 text-[21px] font-semibold leading-[1.18] tracking-[-0.015em] text-white",children:t.name}),e.jsx("p",{className:"m-0 text-[14px] leading-[1.6] text-white/65",children:t.description}),e.jsx("div",{className:"mt-auto border-t border-dashed border-white/[0.08] pt-4 font-mono text-[11px] leading-[1.6] tracking-[0.02em] text-white/45",children:t.fns})]},t.id))}),e.jsx("div",{className:"grid grid-cols-1 gap-x-4 md:grid-cols-2",children:l.crossLinks.map(t=>e.jsx(G,{to:t.to,title:t.title,badge:"badge"in t?Re:void 0,description:t.description,icon:_e[t.id]},t.id))})]})}),u=({big:t,unit:s})=>e.jsxs("div",{className:"my-5 flex items-baseline gap-2.5 border-y border-white/[0.08] py-5",children:[e.jsx("span",{className:"font-[family-name:var
7(--font-serif)] text-[46px] leading-none text-[#b5ff3d]",children:t}),e.jsx("span",{className:"font-mono text-[11px] uppercase tracking-[0.06em] text-white/60",children:s})]}),Ce={label:"In Production"},Me="Three workloads. Three architectures.",De="One engine.",Be="Each runs today against a live Kinetica graph, end-to-end, in a single SQL statement — no sidecar solver, no separate spatial engine, no batch job.",He=[{id:"aml",axis:"AML",titlePart1:"Wire-to-address",titleAccent:"exposure trail.",readout:{big:"5",unit:"hops · one query"},body:"bank → wire → txn → account → address. Cypher inside, SUM/COUNT outside, live on the wires table."},{id:"emergency-response",axis:"Emergency response",titlePart1:"Closest of 1,700+",titleAccent:"fire stations.",readout:{big:"1.7K",unit:"origins → 1 disaster"},body:"1.5M-edge road graph, inverse many-to-one Dijkstra, animated SVG of every candidate route."},{id:"logistics",axis:"Logistics",titlePart1:"Two depots. Twelve trucks.",titleAccent:"Partial loads.",readout:{big:"12",unit:"trucks · MILP"},body:"match_supply_demand with multi-modal AIR · SEA · LAND edge labels and partial mid-route drops."}],h={eyebrow:Ce,titlePart1:Me,titleAccent:De,lede:Be,useCases:He},ze=()=>e.jsx("section",{className:"section-y border-t border-white/[0.08] px-6 md:px-10",children:e.jsxs("div",{className:"mx-auto max-w-[1280px]",children:[e.jsxs(d,{eyebrow:h.eyebrow.label,lede:h.lede,className:"mb-14",maxWidth:"800px",children:[h.titlePart1," ",e.jsx(o,{children:h.titleAccent})]}),e.jsx("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:h.useCases.map(t=>e.jsxs("article",{className:"flex flex-col rounded-2xl border border-white/[0.08] bg-[#131318] p-6 transition-colors duration-200 hover:border-[#5a7a1d] hover:bg-[#17171c] md:p-7",children:[e.jsx("div",{className:"mb-3 font-mono text-[11px] uppercase tracking-[0.1em] text-[#b5ff3d]",children:t.axis}),e.jsxs("h4",{className:"m-0 mb-2 text-[22px] font-semibold leading-[1.18] tracking-[-0.018em] text-white",children:[t.titlePart1," ",e.jsx("span",{className:"font-[family-name:var(--font-serif)] font-normal italic text-[#b5ff3d]",children:t.titleAccent})]}),e.jsx(u,{big:t.readout.big,unit:t.readout.unit}),e.jsx("p",{className:"m-0 text-[13.5px] leading-[1.6] text-white/65",children:t.body})]},t.id))})]})}),We={label:"Benchmarks"},Qe="Production results on real hardware —",Ie="dated and attributed.",Ke="Numbers from production builds and POCs, not marketing slides. Full benchmark refresh in progress.",Fe=[{axis:"Shortest path · 5 locations",big:"~250",unit:"ms",body:"500K-edge Seattle road network, multi-source / multi-target, distance ÷ speed weights.",fns:"7.1.10.2 / 7.2.0.7 builds · Q3 2024"},{axis:"Multi-billion edge · 3-hop",big:"1.2–1.8",unit:"sec",body:"4.3 B edges, 2.8 B vertices, source-to-many on a single node with 1 TB RAM + 0.5 TB ZRAM.",fns:"POC build · 2024"},{axis:"Partition rebalance",big:"100×",unit:"faster",body:"Distributed cross-partition shortest path vs random partitioning.",fns:"arXiv:2201.02136 (2022)"}],x={eyebrow:We,titlePart1:Qe,titleAccent:Ie,lede:Ke,benches:Fe},qe=()=>e.jsx("section",{className:"section-y border-t border-white/[0.08] px-6 md:px-10",children:e.jsxs("div",{className:"mx-auto max-w-[1280px]",children:[e.jsxs(d,{eyebrow:x.eyebrow.label,lede:x.lede,className:"mb-14",maxWidth:"800px",children:[x.titlePart1," ",e.jsx(o,{children:x.titleAccent})]}),e.jsx("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:x.benches.map(t=>e.jsxs("div",{className:"flex flex-col rounded-2xl border border-white/[0.08] bg-[#131318] p-6 md:p-7",children:[e.jsx("div",{className:"font-mono text-[11px] uppercase tracking-[0.1em] text-[#b5ff3d]",children:t.axis}),e.jsx(u,{big:t.big,unit:t.unit}),e.jsx("p",{className:"m-0 text-[13.5px] leading-[1.6] text-white/65",children:t.body}),e.jsx("div",{className:"mt-auto border-t border-dashed border-white/[0.08] pt-4 font-mono text-[11px] tracking-[0.02em] text-white/45",children:t.fns})]},t.axis))})]})}),Ue="One engine.",Ye="Every graph.",Ve="The one your analytics already speak to.",Xe={label:"Start Free",href:"/kinetica-developer-edition"},Ze={label:"Read the paper",href:"https://arxiv.org/abs/2201.02136"},Je={headlinePart1:Ue,headlineAccent:Ye,headlinePart2:Ve,ctaPrimary:Xe,ctaSecondary:Ze},et=()=>e.jsx(_,{...Je}),tt=[{q:"How is Kinetica's graph database different from Neo4j or TigerGraph?",a:"Dedicated graph databases store topology in a system that's separate from your relational data — which means attributes get duplicated and joins back to tables happen in application code. Kinetica keeps topology and attributes in the same engine: <code>NODE</code>, <code>EDGE</code>, <code>WEIGHTS</code>, and <code>RESTRICTIONS</code> are annotated column references on existing tables, so a graph traversal can filter on any column without copying or syncing anything."},{q:"What is the Double-Link Structure (DLS) and why does it matter for streaming graphs?",a:'Standard graph storage uses Compressed Sparse Row (CSR), where edges are packed contiguously by source node. An insert on a busy node forces every downstream cell to shift in memory — an O(n) cost per edge. DLS uses fixed-size linked cells: each edge costs two pointer writes, an O(1) operation, so the graph holds its shape under continuous upserts instead of waiting on a batch rebuild. The architecture is documented in <a href="https://arxiv.org/abs/2201.02136" target="_blank" rel="noopener">arXiv:2201.02136</a>.'},{q:"Can graph traversals filter on columns that aren't part of the graph?",a:"Yes — and that's the point of the hybrid architecture. Pass a SQL <code>SELECT</code> as the <code>RESTRICTIONS</code> argument to <code>QUERY_GRAPH</code> and the predicate is evaluated by the distributed OLAP engine for every candidate node during the walk. Failed nodes are pruned mid-traversal. The filter can reference any column on any table in the database, including columns the graph has never seen."},{q:"What graph algorithms ship with Kinetica out of the box?",a:"Three endpoint families, all callable from standard SQL: <strong>Solve</strong> (<code>shortest_path</code>, <code>multiple_routing</code>/TSP, <code>backhaul_routing</code>, <code>page_rank</code>, <code>probability_rank</code>, <code>centrality</code>, <code>closeness</code>, <code>stats_all</code>, <code>inverse_shortest_path</code>), <strong>Match</strong> (<code>match_supply_demand</code>, <code>map_matching</code>, <code>charging_stations</code>, <code>pickup_dropoff</code>, <code>loops</code>, <code>similarity</code>, <code>clusters</code> via Louvain/RSB, <code>pattern</code>, <code>batch_solves</code> — four of which are patented), and <strong>Query</strong> (label-aware hop-based traversals with OLAP restrictions)."},{q:"How big a graph can Kinetica hold, and how fast can it traverse it?",a:"On a 500K-edge Seattle road network, a multi-source <code>SHORTEST_PATH</code> over five lon/lat pairs returns in roughly 250 ms. On a single node with 1 TB RAM + 0.5 TB ZRAM, Kinetica has held a 4.3 B-edge / 2.8 B-vertex graph and run 3-hop source-to-many queries in 1.2–1.8 seconds."}],at={items:tt},wt=()=>(w("Graph | Kinetica"),e.jsxs("div",{className:"hex-tile-bg",children:[e.jsx(Y,{}),e.jsx(le,{}),e.jsx(ge,{}),e.jsx(Ne,{}),e.jsx($e,{}),e.jsx(ze,{}),e.jsx(qe,{}),e.jsx(et,{}),e.jsx(R,{items:at.items})]}));
7export{wt as FeaturesGraphAnalyticsPage,le as GraphAnalyticsCategory,et as GraphAnalyticsFinalCta,Y as GraphAnalyticsHero,ze as GraphAnalyticsInProduction,Ne as GraphAnalyticsLiveGraph,qe as GraphAnalyticsNumbers,ge as GraphAnalyticsQuery,$e as GraphAnalyticsToolkit};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.