PostgreSQL์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก AGE ์ถ”๊ฐ€๊ฐ€ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL์˜ ๊ฒฝ์šฐ ์— ์˜ํ•ด ์ œ์•ˆ ์ฟผ๋ฆฌ ์–ธ์–ด ๊ตฌํ˜„์„ ํ†ตํ•œ AGE(AgensGraph-Extension) ์ถ”๊ฐ€ ์˜คํ”ˆ์‚ฌ์ดํผ ๊ทธ๋ž˜ํ”„๋ฅผ ํ˜•์„ฑํ•˜๋Š” ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ๊ณ„์ธต์  ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ด๊ณผ ํ–‰ ๋Œ€์‹  ๊ทธ๋ž˜ํ”„ ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋„คํŠธ์›Œํฌ์™€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋…ธ๋“œ, ํ•ด๋‹น ์†์„ฑ ๋ฐ ๋…ธ๋“œ ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ๋‚˜์ด ๋ฐฐํฌ์ž Apache 2.0 ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์œผ๋ฉฐ Bitnine์ด Apache Foundation์˜ ํ›„์›์„ ๋ฐ›์•„ ํ˜„์žฌ Apache Incubator์— ๋ณด๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” DBMS์˜ ๊ฐœ๋ฐœ์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ์•„์  ์Šค๊ทธ๋ž˜ํ”„, ์–ด๋Š ์ด ๊ทธ๋ž˜ํ”„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ˆ˜์ •๋œ PostgreSQL ์ˆ˜์ •์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ์ฐจ์ด์ ์€ ํ‘œ์ค€ PostgreSQL ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฒ”์šฉ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ํ˜•ํƒœ๋กœ AGE๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ตœ๊ทผ ๋ฐœํ–‰๋œ ์ด์Šˆ ์•„ํŒŒ์น˜ ์‹œ๋Œ€ 0.2.0 PostgreSQL 11์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ƒํƒœ AGE ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ ๋…ธ๋“œ์™€ ๋งํฌ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด "CREATE" ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๊ณ , ์ง€์ •๋œ ์กฐ๊ฑด(WHERE), ์ง€์ •๋œ ์ˆœ์„œ(ORDER BY)์— ๋”ฐ๋ผ ๊ทธ๋ž˜ํ”„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” "MATCH" ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋Š” Cypher ์ฟผ๋ฆฌ ์–ธ์–ด์˜ ๊ธฐ๋Šฅ ์ œํ•œ ์‚ฌํ•ญ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(SKIP, LIMIT). ์ฟผ๋ฆฌ์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์€ "RETURN" ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. "WITH" ํ‘œํ˜„์‹์€ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ์˜ ์†์„ฑ์„ ๊ณ„์ธต์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ชจ๋ธ, ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ, JSON ํ˜•์‹์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ชจ๋ธ์„ ๊ฒฐํ•ฉํ•œ ๋‹ค์ค‘ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SQL ๋ฐ Cypher ์–ธ์–ด์˜ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ†ตํ•ฉ ์ฟผ๋ฆฌ ์‹คํ–‰์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜ํ”„์˜ ๊ผญ์ง€์ ๊ณผ ๋ชจ์„œ๋ฆฌ์˜ ์†์„ฑ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜ํ”„์˜ ๋ชจ์„œ๋ฆฌ, ์ •์  ๋ฐ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์œ ํ˜•์„ ํฌํ•จํ•˜์—ฌ Agtype ์œ ํ˜•์˜ ํ™•์žฅ๋œ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง‘๊ณ„ ํ‘œํ˜„์‹์€ ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŠน์ˆ˜ ํ•จ์ˆ˜์—๋Š” id, start_id, end_id, ์œ ํ˜•, ์†์„ฑ, head, last, length, size, startNode, endNode, timestamp, toBoolean, toFloat, toInteger ๋ฐ coalesce๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€