เดเดฒเตเดฒเดพเดตเตผเดเตเดเตเด เดนเดพเดฏเต. เดเดซเตโเดฒเตเตป เดเตเดฐเดพเดซเดฟเดเต เดตเดฟเดถเดเดฒเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เดเดเตเดเตพ เดเดฐเต เดเตฝเดชเตเดชเดจเตเดจเด เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเดเดฏเดพเดฃเต. เดชเตเดฐเดฆเตเดถเดเตเดเดณเดฟเดฒเตเดเดจเตเดณเดฎเตเดณเตเดณ เดธเดจเตเดฆเตผเดถเด เดฑเตเดเตเดเตเดเดณเตเดเต เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐ เดตเดฟเดถเดเดฒเดจเดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเด เดเดฐเต เดเดพเดธเตโเดเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเดฟเดจเตเดฃเตเดเต.
เด เดเดพเดธเตเดเตเดเดฟเดจเตเดฑเต เดญเดพเดเดฎเดพเดฏเดฟ, เดเดชเดฏเตเดเตเดคเดพเดเตเดเตพเดเตเดเต เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดธเดฟเดธเตเดฑเตเดฑเด เดเตเดฆเตเดฏเดเตเดเตพ เดเตเดฆเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด:
- "เด" เดเดฐเดฟเดฏเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต "เดฌเดฟ" เดเดฐเดฟเดฏเดฏเดฟเดฒเตเดเตเดเต เดเดคเตเดฐ เดธเดจเตเดฆเตผเดถเดเตผ เดเดเดจเตเดจเตเดชเตเดฏเดฟ;
- "เด" เดเดฐเดฟเดฏเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต "เดฌเดฟ" เดเดฐเดฟเดฏเดฏเดฟเดฒเตเดเตเดเต "เดธเดฟ" เดเดฐเดฟเดฏเดฏเดฟเดฒเตเดเตเดฏเตเด เดคเตเดเตผเดจเตเดจเต "เดกเดฟ" เดเดฐเดฟเดฏเดฏเดฟเดฒเตเดเตเดฏเตเด เดเดคเตเดฐ เดธเดจเตเดฆเตผเดถเดเตผ เดเดเดจเตเดจเตเดชเตเดฏเดฟ;
- เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดคเดฐเด เดธเดจเตเดฆเตผเดถเดเตผเดเตเดเต "A" เดเดฐเดฟเดฏเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต "B" เดเดฐเดฟเดฏเดฏเดฟเดฒเตเดเตเดเต เดฏเดพเดคเตเดฐ เดเตเดฏเตเดฏเดพเตป เดเดคเตเดฐ เดธเดฎเดฏเดฎเตเดเตเดคเตเดคเต.
เดธเดฎเดพเดจเดฎเดพเดฏ เด เดจเดฒเดฟเดฑเตเดฑเดฟเดเตเดเตฝ เดเตเดฆเตเดฏเดเตเดเดณเตเด.
เดชเตเดฐเดฆเตเดถเดเตเดเดณเดฟเดฒเตเดเดจเตเดณเด เดธเดจเตเดฆเตผเดถเดเดฐเตเดเต เดเดฒเดจเด เดเดฐเต เดกเดฏเดฑเดเตเดเต เดเตเดฐเดพเดซเต เดเดฃเต. เดเดจเตเดฑเตผเดจเตเดฑเตเดฑเต เดตเดพเดฏเดฟเดเตเดเดคเดฟเดจเตเดถเตเดทเด, เดเตเดฐเดพเดซเต เดกเดฟเดฌเดฟเดเดเดเดธเตเดเดณเตเด เดตเดฟเดถเดเดฒเดจ เดฑเดฟเดชเตเดชเตเตผเดเตเดเตเดเตพเดเตเดเดพเดฏเดฟ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเตเดฃเตเดเตเดจเตเดจเต เดเดพเตป เดเดฃเตเดเตเดคเตเดคเดฟ. เดเดคเตเดคเดฐเด เดเตเดฆเตเดฏเดเตเดเดณเต เดเตเดฐเดพเดซเต เดกเดฟเดฌเดฟเดเดเดเดธเตเดเตพ เดเดเตเดเดจเต เดจเตเดฐเดฟเดเตเดฎเตเดจเตเดจเต เดเดพเดฃเดพเตป เดเดจเดฟเดเตเดเต เดเดเตเดฐเดนเดฎเตเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต (TL; DR; เดฎเตเดถเดฎเดพเดฏเดฟ).
เดเดพเตป DBMS เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดคเดฟเดฐเดเตเดเตเดเตเดคเตเดคเต
- เดฌเตเตผเดเตเดเตโเดฒเดฟเดกเดฟเดฌเดฟ เดธเตเดฑเตเดฑเตเดฑเตเดเต เดฌเดพเดเตเดเตเตปเดกเต, เด เดชเตเดชเดพเดเตเดเต เดเดธเดพเดจเตเดฆเตเดฐ, เดธเตเดเดฟเดฒเตเดฒ;
- เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดธเตเดเดฟเดเดเตพ Lucene, Elasticsearch, Solr เดเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดธเตเดเตเดทเดฟเดเตเดเดพเด.
OLTP, OLAP เดเดจเตเดจเดฟเดตเดฏเตโเดเตเดเต เดเดคเต เด เดจเตเดฏเตเดเตเดฏเดฎเดพเดฃเตเดจเตเดจเต JanusGraph-เดจเตเดฑเต เดฐเดเดฏเดฟเดคเดพเดเตเดเตพ เดเดดเตเดคเตเดจเตเดจเต.
เดเดพเตป BerkeleyDB, Apache Cassandra, Scylla, ES เดเดจเตเดจเดฟเดตเดฏเตโเดเตเดเตเดชเตเดชเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดฟเดเตเดเตเดฃเตเดเต, เด เดเตฝเดชเตเดชเดจเตเดจเดเตเดเตพ เดเดเตเดเดณเตเดเต เดธเดฟเดธเตเดฑเตเดฑเดเตเดเดณเดฟเตฝ เดชเดฒเดชเตเดชเตเดดเตเด เดเดชเดฏเตเดเดฟเดเตเดเดพเดฑเตเดฃเตเดเต, เด เดคเดฟเดจเดพเตฝ เด เดเตเดฐเดพเดซเต DBMS เดชเดฐเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเดคเดฟเตฝ เดเดจเดฟเดเตเดเต เดถเตเดญเดพเดชเตเดคเดฟ เดตเดฟเดถเตเดตเดพเดธเดฎเตเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต. RocksDB-เดฏเตเดเตเดเดพเตพ BerkeleyDB เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเดจเตเดจเดคเต เดตเดฟเดเดฟเดคเตเดฐเดฎเดพเดฃเตเดจเตเดจเต เดเดพเตป เดเดฃเตเดเตเดคเตเดคเดฟ, เดชเดเตเดทเต เด เดคเต เดเดเดชเดพเดเต เดเดตเดถเตเดฏเดเดคเดเตพ เดเดพเดฐเดฃเดฎเดพเดฏเดฟเดฐเดฟเดเตเดเดพเด. เดเดคเต เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด, เดธเตเดเตเดฏเดฟเดฒเดฌเดฟเตพ, เดเตฝเดชเตเดชเดจเตเดจ เดเดชเดฏเตเดเดคเตเดคเดฟเดจเต, เดเดธเดพเดจเตเดฆเตเดฐเดฏเดฟเดฒเต เดธเตเดเดฟเดฒเตเดฒเดฏเดฟเดฒเต เดเดฐเต เดฌเดพเดเตเดเตเตปเดกเต เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดจเดฟเตผเดฆเตเดฆเตเดถเดฟเดเตเดเตเดจเตเดจเต.
เดเดพเตป Neo4j เดชเดฐเดฟเดเดฃเดฟเดเตเดเดฟเดฒเตเดฒ, เดเดพเดฐเดฃเด เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดเตเดเดฟเดจเต เดเดฐเต เดตเดพเดฃเดฟเดเตเดฏ เดชเดคเดฟเดชเตเดชเต เดเดตเดถเตเดฏเดฎเดพเดฃเต, เด เดคเดพเดฏเดคเต เดเตฝเดชเตเดชเดจเตเดจเด เดเดชเตเดชเตบ เดธเตเดดเตโเดธเต เด เดฒเตเดฒ.
เดเตเดฐเดพเดซเต DBMS เดชเดฑเดฏเตเดจเตเดจเต: "เดเดคเต เดเดฐเต เดเตเดฐเดพเดซเต เดชเตเดฒเตเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เด เดคเดฟเดจเต เดเดฐเต เดเตเดฐเดพเดซเต เดชเตเดฒเต เดชเดฐเดฟเดเดฃเดฟเดเตเดเตเด!" - เดธเตเดจเตเดฆเดฐเตเดฏเด!
เดเดฆเตเดฏเด, เดเดพเตป เดเดฐเต เดเตเดฐเดพเดซเต เดตเดฐเดเตเดเต, เด เดคเต เดเตเดฐเดพเดซเต เดกเดฟเดฌเดฟเดเดเดเดธเตเดเดณเตเดเต เดเดพเดจเตเดจเตเดเตพ เด เดจเตเดธเดฐเดฟเดเตเดเต เดเตเดคเตเดฏเดฎเดพเดฏเดฟ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดคเดพเดฃเต:
เดเดฐเต เดธเดคเตเดคเดฏเตเดฃเตเดเต Zone
, เดชเตเดฐเดฆเตเดถเดคเตเดคเดฟเดจเตเดฑเต เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเด. เดเดเตเดเดฟเตฝ ZoneStep
เดเดคเดฟเตฝ เดชเตเดเตเดเดคเดพเดฃเต Zone
, เดชเดฟเดจเตเดจเต เด
เดตเตป เด
เดคเดฟเดจเต เดชเดฐเดพเดฎเตผเดถเดฟเดเตเดเตเดจเตเดจเต. เดธเดพเดฐเดพเดเดถเดคเตเดคเดฟเตฝ Area
, ZoneTrack
, Person
เดถเตเดฐเดฆเตเดงเดฟเดเตเดเดฐเตเดคเต, เด
เดตเตผ เดกเตเดฎเตเดฏเตโเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณเดตเดฐเดพเดฃเต, เดเตเดเดพเดคเต เดชเดฐเดฟเดถเตเดงเดจเดฏเตเดเต เดญเดพเดเดฎเดพเดฏเดฟ เดชเดฐเดฟเดเดฃเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเดฟเดฒเตเดฒ. เดฎเตเดคเตเดคเดคเตเดคเดฟเตฝ, เด
เดคเตเดคเดฐเดฎเตเดฐเต เดเตเดฐเดพเดซเต เดเดเดจเดฏเตเดเตเดเตเดณเตเดณ เดเดฐเต เดเตเดฏเดฟเตป เดคเดฟเดฐเดฏเตฝ เด
เดจเตเดตเตเดทเดฃเด เดเดคเตเดชเตเดฒเต เดเดพเดฃเดชเตเดชเตเดเตเด:
g.V().hasLabel('Zone').has('id',0).in_()
.repeat(__.out()).until(__.out().hasLabel('Zone').has('id',19)).count().next()
เดฑเดทเตเดฏเตป เดญเดพเดทเดฏเดฟเตฝ เดเดคเตเดชเตเดฒเตเดฏเดพเดฃเต: ID=0 เดเดณเตเดณ เดเดฐเต เดธเตเตบ เดเดฃเตเดเตเดคเตเดคเตเด, เด เดคเดฟเดฒเตเดเตเดเต เดเดฐเต เดเดกเตเดเต เดชเตเดเตเดจเตเดจ เดเดฒเตเดฒเดพ เดถเตเตผเดทเดเดเตเดเดณเตเด เดเดเตเดเตเดเตเด (ZoneStep), เดธเตเดฃเดฟเดฒเตเดเตเดเต เดเดฐเต เดเดกเตเดเต เดเดณเตเดณ เด เดธเตเตบเดธเตเดฑเตเดฑเตเดชเตเดชเตเดเตพ เดเดฃเตเดเตเดคเตเดคเตเดจเตเดจเดคเต เดตเดฐเต เดชเดฟเดจเตเดจเตเดเตเดเต เดชเตเดเดพเดคเต เดธเตเดฑเตเดฑเตเดฎเตเดชเต เดเตเดฏเตเดฏเตเด เดเดกเดฟ=19, เด เดคเตเดคเดฐเด เดเตเดฏเดฟเดจเตเดเดณเตเดเต เดเดฃเตเดฃเด เดเดฃเตเดฃเตเด.
เดเตเดฐเดพเดซเตเดเดณเดฟเตฝ เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดจเตเดฑเต เดเดฒเตเดฒเดพ เดธเดเตเดเตเตผเดฃเดคเดเดณเตเด เดเดพเตป เด
เดฑเดฟเดฏเตเดจเตเดจเดคเดพเดฏเดฟ เดจเดเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ, เดชเดเตเดทเต เด เดชเตเดธเตเดคเดเดคเตเดคเต เด
เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟเดฏเดพเดฃเต เด เดเตเดฆเตเดฏเด เดธเตเดทเตเดเดฟเดเตเดเดคเต (
เดฌเตเตผเดเตเดเตโเดฒเดฟเดกเดฟเดฌเดฟ เดฌเดพเดเตเดเตเตปเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต 50 เดฎเตเดคเตฝ 3 เดชเตเดฏเดฟเดจเตเดฑเต เดตเดฐเต เดจเตเดณเดฎเตเดณเตเดณ 20 เดเตเดฐเดพเดเตเดเตเดเตพ เดเดพเตป เดเดพเดจเดธเตโเดเตเดฐเดพเดซเต เดเตเดฐเดพเดซเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเตเดเตเดเต เดฒเตเดกเต เดเตเดฏเตโเดคเต.
เดชเตเดคเตเดคเตบ เดกเตเตบเดฒเตเดกเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต:
from random import random
from time import time
from init import g, graph
if __name__ == '__main__':
points = []
max_zones = 19
zcache = dict()
for i in range(0, max_zones + 1):
zcache[i] = g.addV('Zone').property('id', i).next()
startZ = zcache[0]
endZ = zcache[max_zones]
for i in range(0, 10000):
if not i % 100:
print(i)
start = g.addV('ZoneStep').property('time', int(time())).next()
g.V(start).addE('belongs').to(startZ).iterate()
while True:
pt = g.addV('ZoneStep').property('time', int(time())).next()
end_chain = random()
if end_chain < 0.3:
g.V(pt).addE('belongs').to(endZ).iterate()
g.V(start).addE('goes').to(pt).iterate()
break
else:
zone_id = int(random() * max_zones)
g.V(pt).addE('belongs').to(zcache[zone_id]).iterate()
g.V(start).addE('goes').to(pt).iterate()
start = pt
count = g.V().count().next()
print(count)
เดเดเตเดเตพ เดเดฐเต SSD-เดฏเดฟเตฝ 4 เดเตเดฑเตเดเดณเตเด 16 GB เดฑเดพเดฎเตเด เดเดณเตเดณ VM เดเดชเดฏเตเดเดฟเดเตเดเต. เด เดเดฎเดพเตปเดกเต เดเดชเดฏเตเดเดฟเดเตเดเดพเดฃเต JanusGraph เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเดคเต:
docker run --name janusgraph -p8182:8182 janusgraph/janusgraph:latest
เด เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเตเดคเตเดฏเดฎเดพเดฏ เดชเตเดฐเตเดคเตเดค เดคเดฟเดฐเดฏเดฒเตเดเตพเดเตเดเดพเดฏเดฟ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจ เดกเดพเดฑเตเดฑเดฏเตเด เดธเตเดเดฟเดเดเดณเตเด BerkeleyDB-เดฏเดฟเตฝ เดธเดเดญเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดจเตเดฐเดคเตเดคเต เดจเตฝเดเดฟเดฏ เด เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดฟเดฏเดคเดฟเดจเดพเตฝ, เดเดจเดฟเดเตเดเต เดจเดฟเดฐเดตเดงเดฟ เดชเดคเดฟเดจเดพเดฏเดฟเดฐเดเตเดเดฃเดเตเดเดฟเดจเต เดธเตเดเตเดเตปเดกเตเดเตพเดเตเดเต เดคเตเดฒเตเดฏเดฎเดพเดฏ เดธเดฎเดฏเด เดฒเดญเดฟเดเตเดเต.
เดฎเตเดเดณเดฟเดฒเต 4 เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตเดเตพ เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเดเต, เดกเตเดเตเดเตผ เดฒเตเดเตเดเดณเดฟเดฒเต เดเดพเดต เดธเตเดฑเตเดฑเดพเดเตเดเตเดเตเดฐเตเดธเตเดเดณเตเดเต (เดเดเตเดเตพ เดเดฒเตเดฒเดพเดตเดฐเตเด เดเดพเดต เดธเตเดฑเตเดฑเดพเดเตเดเตเดเตเดฐเตเดธเตเดเตพ เดตเดพเดฏเดฟเดเตเดเดพเตป เดเดทเตเดเดชเตเดชเตเดเตเดจเตเดจเต) เดธเดจเตเดคเตเดทเดเดฐเดฎเดพเดฏ เดเดฐเต เดธเตเดเตเดฐเตเด เดเดชเดฏเตเดเดฟเดเตเดเต DBMS-เดจเต เดเดฐเต เดฎเดคเตเดคเดเตเดเดฏเดพเดเตเดเดฟ เดฎเดพเดฑเตเดฑเดพเตป เดเดจเดฟเดเตเดเต เดเดดเดฟเดเตเดเต.
เดเตเดฑเดเตเดเต เดเดฒเตเดเดฟเดเตเด เดถเตเดทเด, เดเตเดฐเดพเดซเต เดกเดฏเดเตเดฐเด เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดคเดฟเดฒเตเดเตเดเต เดฒเดณเดฟเดคเดฎเดพเดเตเดเดพเตป เดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต:
เดเดจเตเดฑเดฟเดฑเตเดฑเดฟ เดเดเตเดฐเดฟเดฌเตเดฏเตเดเตเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดคเดฟเดฐเดฏเตเดจเตเดจเดคเต เด เดฐเดฟเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดจเตเดเตเดเดพเตพ เดตเตเดเดคเตเดคเดฟเดฒเดพเดฏเดฟเดฐเดฟเดเตเดเตเดฎเตเดจเตเดจเต เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเตเดจเตเดจเต. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดเดจเตเดฑเต เด เดญเตเดฏเตผเดคเตเดฅเดจ เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดตเดฏเดพเดฏเดฟ เดฎเดพเดฑเดฟ:
g.V().hasLabel('ZoneStep').has('id',0).repeat(__.out().simplePath()).until(__.hasLabel('ZoneStep').has('id',19)).count().next()
เดฑเดทเตเดฏเตป เดญเดพเดทเดฏเดฟเตฝ เดเดคเตเดชเตเดฒเตเดฏเดพเดฃเต: ID=0 เดเดชเดฏเตเดเดฟเดเตเดเต ZoneStep เดเดฃเตเดเตเดคเตเดคเตเด, ID=19 เดเดณเตเดณ ZoneStep เดเดฃเตเดเตเดคเตเดคเตเดจเตเดจเดคเตเดตเดฐเต เดคเดฟเดฐเดฟเดเต เดชเตเดเดพเดคเต เดธเตโเดฑเตเดฑเตเดฎเตเดชเต เดเตเดฏเตเดฏเตเด, เด เดคเตเดคเดฐเด เดเตเดฏเดฟเดจเตเดเดณเตเดเต เดเดฃเตเดฃเด เดเดฃเตเดฃเตเด.
เด เดจเดพเดตเดถเตเดฏ เดเดฃเดเตเดทเดจเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเดพเดคเดฟเดฐเดฟเดเตเดเดพเตป, เดเดเตเดฐเดฟเดฌเตเดฏเตเดเตเดเตเดเดณเดฟเดฒเตเดเตเดเต เดเดจเตเดจเตเดคเตเดคเดจเตเดจเต เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดเดณเดฟเตฝ เดจเตฝเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดฒเตเดกเดฟเดเดเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตเด เดเดพเตป เดฒเดณเดฟเดคเดฎเดพเดเตเดเดฟ.
เด เดญเตเดฏเตผเดคเตเดฅเดจ เดชเตเตผเดคเตเดคเดฟเดฏเดพเดเดพเตป เดเดจเดฟเดฏเตเด เดเตเดฑเดเตเดเต เดธเตเดเตเดเดจเตเดฑเตเดเตพ เดเดเตเดคเตเดคเต, เดเดคเต เดเดเตเดเดณเตเดเต เดเดพเดธเตโเดเตเดเดฟเดจเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เด เดธเตเดตเตเดเดพเดฐเตเดฏเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดเดพเดฐเดฃเด เดเดคเต เดเดคเตเดเตเดเดฟเดฒเตเด เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ AdHoc เด เดญเตเดฏเตผเดคเตเดฅเดจเดเดณเตเดเต เดเดตเดถเตเดฏเดเตเดเตพเดเตเดเต เดเดเตเดเตเด เด เดจเตเดฏเตเดเตเดฏเดฎเดฒเตเดฒ.
เดเดพเตป เดธเตเดเดฟเดฒเตเดฒ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดพเดจเดธเตเดเตเดฐเดพเดซเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเดพเตป เดถเตเดฐเดฎเดฟเดเตเดเต, เดเดจเตเดจเดพเตฝ เดเดคเตเด เดเดพเดฐเตเดฏเดฎเดพเดฏ เดชเตเดฐเดเดเดจ เดฎเดพเดฑเตเดฑเดเตเดเดณเตเดจเตเดจเตเด เดตเดฐเตเดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ.
"เดเดคเต เดเดฐเต เดเตเดฐเดพเดซเต เดชเตเดฒเต เดคเตเดจเตเดจเตเดจเตเดจเต" เดเดจเตเดจ เดตเดธเตเดคเตเดค เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดเตเดเตเด, เด เดคเต เดตเตเดเดคเตเดคเดฟเตฝ เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเดพเตป เดเดจเดฟเดเตเดเต เดเตเดฐเดพเดซเต DBMS เดฒเดญเดฟเดเตเดเดฟเดฒเตเดฒ. เดเดจเดฟเดเตเดเต เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เด เดฑเดฟเดฏเดฟเดฒเตเดฒเตเดจเตเดจเตเด เดเดฐเต เดจเดฟเดฎเดฟเดทเดคเตเดคเดฟเดจเตเดณเตเดณเดฟเตฝ เด เดคเดฟเดฐเดฏเตฝ เดจเดเดคเตเดคเดพเตป JanusGraph-เดจเต เดชเตเดฐเตเดฐเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเดฎเตเดจเตเดจเตเด เดเดพเตป เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เด เดจเตเดฎเดพเดจเดฟเดเตเดเตเดจเตเดจเต, เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดเดจเดฟเดเตเดเต เด เดคเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดเตเดเดฟเดฒเตเดฒ.
เดชเตเดฐเดถเตเดจเด เดเดชเตเดชเตเดดเตเด เดชเดฐเดฟเดนเดฐเดฟเดเตเดเตเดฃเตเดเดคเดฟเดจเดพเตฝ, เดเดพเตป เดเตเดฏเดฟเดจเตเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเตเด เดชเดเตเดเดฟเดเดเดณเตเดเต เดชเดฟเดตเดฑเตเดฑเตเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเตเด เดเดฟเดจเตเดคเดฟเดเตเดเดพเตป เดคเตเดเดเตเดเดฟ, เด เดคเต เดเดพเดฐเตเดคเดฏเตเดเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เดถเตเดญเดพเดชเตเดคเดฟเดตเดฟเดถเตเดตเดพเดธเดคเตเดคเต เดชเตเดฐเดเตเดฆเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ, เดชเดเตเดทเต เดชเตเดฐเดพเดฏเตเดเดฟเดเดฎเดพเดฏเดฟ เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดทเดฎเดฎเดพเดฏ เดเดชเตเดทเดจเดพเดฏเดฟเดฐเดฟเดเตเดเดพเด.
เดเดเตเดเดณเตเดเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดเดคเดฟเดจเดเด เดคเดจเตเดจเต เด เดชเตเดชเดพเดเตเดเต เดเตเดฒเดฟเดเตเดเตเดนเตเดธเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต, เด เดคเดฟเดจเดพเตฝ เด เด เดจเดฒเดฟเดฑเตเดฑเดฟเดเตเดเตฝ เดกเดฟเดฌเดฟเดเดเดเดธเดฟเตฝ เดเดจเตเดฑเต เดเดตเตเดทเดฃเด เดชเดฐเตเดเตเดทเดฟเดเตเดเดพเตป เดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต.
เดเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเดพเดเดเดเตเดเตเดฑเดฟเดชเตเดชเต เดเดชเดฏเตเดเดฟเดเตเดเต ClickHouse เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเต:
sudo docker run -d --name clickhouse_1
--ulimit nofile=262144:262144
-v /opt/clickhouse/log:/var/log/clickhouse-server
-v /opt/clickhouse/data:/var/lib/clickhouse
yandex/clickhouse-server
เดเดพเตป เดเดคเตเดชเตเดฒเต เดเดฐเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเตเด เด เดคเดฟเตฝ เดเดฐเต เดชเดเตเดเดฟเดเดฏเตเด เดธเตเดทเตเดเดฟเดเตเดเต:
CREATE TABLE
db.steps (`area` Int64, `when` DateTime64(1, 'Europe/Moscow') DEFAULT now64(), `zone` Int64, `person` Int64)
ENGINE = MergeTree() ORDER BY (area, zone, person) SETTINGS index_granularity = 8192
เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต เดเดพเตป เด เดคเต เดกเดพเดฑเตเดฑ เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเดฟเดชเตเดชเดฟเดเตเดเต:
from time import time
from clickhouse_driver import Client
from random import random
client = Client('vm-12c2c34c-df68-4a98-b1e5-a4d1cef1acff.domain',
database='db',
password='secret')
max = 20
for r in range(0, 100000):
if r % 1000 == 0:
print("CNT: {}, TS: {}".format(r, time()))
data = [{
'area': 0,
'zone': 0,
'person': r
}]
while True:
if random() < 0.3:
break
data.append({
'area': 0,
'zone': int(random() * (max - 2)) + 1,
'person': r
})
data.append({
'area': 0,
'zone': max - 1,
'person': r
})
client.execute(
'INSERT INTO steps (area, zone, person) VALUES',
data
)
เดเตพเดชเตเดชเตเดเตเดคเตเดคเดฒเตเดเตพ เดฌเดพเดเตเดเตเดเดณเดพเดฏเดฟ เดตเดฐเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดชเตเดฐเดฟเดชเตเดชเดฟเดเตเดเตฝ เดเดพเดจเดธเต เดเตเดฐเดพเดซเดฟเดจเตเดเตเดเดพเตพ เดตเดณเดฐเต เดตเตเดเดคเตเดคเดฟเดฒเดพเดฏเดฟเดฐเตเดจเตเดจเต.
JOIN เดเดชเดฏเตเดเดฟเดเตเดเต เดฐเดฃเตเดเต เด เดจเตเดตเตเดทเดฃเดเตเดเตพ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเต. เดชเตเดฏเดฟเดจเตเดฑเต เดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดฌเดฟ เดชเตเดฏเดฟเดจเตเดฑเดฟเดฒเตเดเตเดเต เดจเตเดเตเดเดพเตป:
SELECT s1.person AS person,
s1.zone,
s1.when,
s2.zone,
s2.when
FROM
(SELECT *
FROM steps
WHERE (area = 0)
AND (zone = 0)) AS s1 ANY INNER JOIN
(SELECT *
FROM steps AS s2
WHERE (area = 0)
AND (zone = 19)) AS s2 USING person
WHERE s1.when <= s2.when
3 เดชเตเดฏเดฟเดจเตเดฑเตเดเดณเดฟเดฒเตเดเต เดเดเดจเตเดจเตเดชเตเดเดพเตป:
SELECT s3.person,
s1z,
s1w,
s2z,
s2w,
s3.zone,
s3.when
FROM
(SELECT s1.person AS person,
s1.zone AS s1z,
s1.when AS s1w,
s2.zone AS s2z,
s2.when AS s2w
FROM
(SELECT *
FROM steps
WHERE (area = 0)
AND (zone = 0)) AS s1 ANY INNER JOIN
(SELECT *
FROM steps AS s2
WHERE (area = 0)
AND (zone = 3)) AS s2 USING person
WHERE s1.when <= s2.when) p ANY INNER JOIN
(SELECT *
FROM steps
WHERE (area = 0)
AND (zone = 19)) AS s3 USING person
WHERE p.s2w <= s3.when
เด เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ เดคเตเตผเดเตเดเดฏเดพเดฏเตเด เดญเดฏเดพเดจเดเดฎเดพเดฃเต; เดฏเดฅเดพเตผเดคเตเดฅ เดเดชเดฏเตเดเดคเตเดคเดฟเดจเต, เดจเดฟเดเตเดเตพ เดเดฐเต เดธเตเดซเตเดฑเตเดฑเตเดตเตเดฏเตผ เดเดจเดฑเตเดฑเตเดฑเตผ เดนเดพเตผเดจเตเดธเต เดธเตเดทเตเดเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เด เดต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดเดฏเตเด เดตเตเดเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต. เดเดจเตเดจเตเด เดฐเดฃเตเดเตเด เด เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ 0.1 เดธเตเดเตเดเตปเดกเดฟเดจเตเดณเตเดณเดฟเตฝ เดชเตเตผเดคเตเดคเดฟเดฏเดพเดฏเดฟ. เดเดฃเตเดฃเด (*) 3 เดชเตเดฏเดฟเดจเตเดฑเตเดเดณเดฟเดฒเตเดเต เดเดเดจเตเดจเตเดชเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด เดจเตเดตเตเดทเดฃ เดจเดฟเตผเดตเตเดตเดนเดฃ เดธเดฎเดฏเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดเดคเดพ:
SELECT count(*)
FROM
(
SELECT
s1.person AS person,
s1.zone AS s1z,
s1.when AS s1w,
s2.zone AS s2z,
s2.when AS s2w
FROM
(
SELECT *
FROM steps
WHERE (area = 0) AND (zone = 0)
) AS s1
ANY INNER JOIN
(
SELECT *
FROM steps AS s2
WHERE (area = 0) AND (zone = 3)
) AS s2 USING (person)
WHERE s1.when <= s2.when
) AS p
ANY INNER JOIN
(
SELECT *
FROM steps
WHERE (area = 0) AND (zone = 19)
) AS s3 USING (person)
WHERE p.s2w <= s3.when
โโcount()โโ
โ 11592 โ
โโโโโโโโโโโ
1 rows in set. Elapsed: 0.068 sec. Processed 250.03 thousand rows, 8.00 MB (3.69 million rows/s., 117.98 MB/s.)
IOPS เดจเต เดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดเดฐเต เดเตเดฑเดฟเดชเตเดชเต. เดกเดพเดฑเตเดฑ เดชเตเดชเตเดชเตเดฒเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ, JanusGraph เดตเดณเดฐเต เดเดฏเตผเดจเตเดจ IOPS (เดจเดพเดฒเต เดกเดพเดฑเตเดฑ เดชเตเดชเตเดชเตเดฒเตเดทเตป เดคเตเดฐเตเดกเตเดเตพเดเตเดเต 1000-1300) เดธเตเดทเตเดเดฟเดเตเดเต, IOWAIT เดตเดณเดฐเต เดเดฏเตผเดจเตเดจเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต. เด เดคเต เดธเดฎเดฏเด, เดเตเดฒเดฟเดเตเดเตเดนเตเดธเต เดกเดฟเดธเตเดเต เดธเดฌเตเดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตฝ เดเตเดฑเดเตเด เดฒเตเดกเต เดเดฃเตเดเดพเดเตเดเดฟ.
เดคเตเดฐเตเดฎเดพเดจเด
เดเดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ เดจเตฝเดเตเดจเตเดจเดคเดฟเดจเต เดเตเดฒเดฟเดเตเดเตเดนเตเดธเต เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดเดเตเดเตพ เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต. ClickHouse-เดฒเตเดเตเดเต เดฒเตเดกเตเดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, Apache Flink เดเดชเดฏเตเดเดฟเดเตเดเต เดเดตเดจเตเดฑเต เดธเตเดเตเดฐเตเด เดชเตเดฐเต-เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเตเดเต, เดฎเตเดฑเตเดฑเตเดฐเดฟเดฏเดฒเตเดธเตเดกเต เดเดพเดดเตโเดเดเดณเตเด เดธเดฎเดพเดจเตเดคเดฐเดตเตฝเดเตเดเดฐเดฃเดตเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเตเดฆเตเดฏเดเตเดเตพ เดเตเดเตเดคเตฝ เดเดชเตเดฑเตเดฑเดฟเดฎเตเดธเต เดเตเดฏเตเดฏเดพเดจเดพเดเตเด.
เดชเตเดฐเดเดเดจเด เดตเดณเดฐเต เดฎเดฟเดเดเตเดเดคเดพเดฃเต, เดเตเดฌเดฟเดณเตเดเตพ เดชเตเดฐเตเดเตเดฐเดพเดฎเดพเดฑเตเดฑเดฟเดเต เดเดฏเดฟ เดชเดฟเดตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต เดจเดฎเตเดเตเดเต เดเดฟเดจเตเดคเดฟเดเตเดเตเดฃเตเดเดฟ เดตเดฐเดฟเดฒเตเดฒ. เดฎเตเดฎเตเดชเต, เด เดชเตเดชเดพเดเตเดเต เดชเดพเตผเดเตเดเตเดตเตเดฑเตเดฑเดฟเดฒเตเดเตเดเต เด เดชเตโเดฒเตเดกเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเตเดเต เดตเตเตผเดเตเดเดฟเดเตเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฃเตเดเตเดเตเดคเตเดค เดกเดพเดฑเตเดฑเดฏเตเดเต เดชเดฟเดตเดฑเตเดฑเตเดเตพ เดเดเตเดเตพเดเตเดเต เดเตเดฏเตเดฏเดฃเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต.
เดจเดฟเตผเดญเดพเดเตเดฏเดตเดถเดพเตฝ, เดเดฐเต เดเตเดฐเดพเดซเต DBMS เดเดชเดฏเตเดเดฟเดเตเดเดพเดจเตเดณเตเดณ เดฎเดฑเตเดฑเตเดฐเต เดถเตเดฐเดฎเด เดตเดฟเดเดฏเดฟเดเตเดเดฟเดฒเตเดฒ. เดเตฝเดชเตเดชเดจเตเดจเดคเตเดคเดฟเดจเตเดฑเต เดตเตเดเดค เดเตเดตเดฐเดฟเดเตเดเตเดจเตเดจเดคเต เดเดณเตเดชเตเดชเดฎเดพเดเตเดเตเดจเตเดจ เดเดฐเต เดธเตเดนเตเดฆ เดเดตเดพเดธเดตเตเดฏเดตเดธเตเดฅเดฏเตเดฃเตเดเตเดจเตเดจเต เดเดพเตป JanusGraph-เดจเต เดเดฃเตเดเตเดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ. เด เดคเต เดธเดฎเดฏเด, เดธเตเตผเดตเตผ เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดชเดฐเดฎเตเดชเดฐเดพเดเดค เดเดพเดต เดฐเตเดคเดฟ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต, เดเดคเต เดเดพเดตเดฏเตเดฎเดพเดฏเดฟ เดชเดฐเดฟเดเดฏเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดเดณเตเดเดณเต เดฐเดเตเดคเดเตเดเดฃเตเดฃเตเตผ เดเดเตเดเตเด:
host: 0.0.0.0
port: 8182
threadPoolWorker: 1
gremlinPool: 8
scriptEvaluationTimeout: 30000
channelizer: org.janusgraph.channelizers.JanusGraphWsAndHttpChannelizer
graphManager: org.janusgraph.graphdb.management.JanusGraphManager
graphs: {
ConfigurationManagementGraph: conf/janusgraph-cql-configurationgraph.properties,
airlines: conf/airlines.properties
}
scriptEngines: {
gremlin-groovy: {
plugins: { org.janusgraph.graphdb.tinkerpop.plugin.JanusGraphGremlinPlugin: {},
org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {},
org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]},
org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/airline-sample.groovy]}}}}
serializers:
# GraphBinary is here to replace Gryo and Graphson
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }}
# Gryo and Graphson, latest versions
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
# Older serialization versions for backwards compatibility:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}
processors:
- { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
- { className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor, config: { cacheExpirationTime: 600000, cacheMaxSize: 1000 }}
metrics: {
consoleReporter: {enabled: false, interval: 180000},
csvReporter: {enabled: false, interval: 180000, fileName: /tmp/gremlin-server-metrics.csv},
jmxReporter: {enabled: false},
slf4jReporter: {enabled: true, interval: 180000},
gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
graphiteReporter: {enabled: false, interval: 180000}}
threadPoolBoss: 1
maxInitialLineLength: 4096
maxHeaderSize: 8192
maxChunkSize: 8192
maxContentLength: 65536
maxAccumulationBufferComponents: 1024
resultIterationBatchSize: 64
writeBufferHighWaterMark: 32768
writeBufferHighWaterMark: 65536
ssl: {
enabled: false}
JanusGraph-เดจเตเดฑเต BerkeleyDB เดชเดคเดฟเดชเตเดชเต เดเดเดธเตเดฎเดฟเดเดฎเดพเดฏเดฟ "เดเดเตเดเต" เดเดจเดฟเดเตเดเต เดเดดเดฟเดเตเดเต.
เดธเตเดเดฟเดเดเดณเตเดเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเตป เดคเดฟเดเดเตเดเตเด เดตเดณเดเตเดเดคเดพเดฃเต, เดเดพเดฐเดฃเด เดธเตเดเดฟเดเดเตพ เดเตเดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเดเตเดเตพ เดเตเดฐเตเดตเดฟเดฏเดฟเตฝ เดเตเดฑเดเตเดเต เดตเดฟเดเดฟเดคเตเดฐเดฎเดพเดฏ เดทเดพเดฎเดจเดฟเดธเด เด เดตเดคเดฐเดฟเดชเตเดชเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเดฐเต เดธเตเดเดฟเด เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเต เดเตเดฐเตเดเดฒเดฟเตป เดเตบเดธเตเดณเดฟเตฝ เดเตเดกเต เดเดดเตเดคเดฟเดฏเดพเดฃเต เดเตเดฏเตเดฏเตเดฃเตเดเดคเต (เดเดคเต เดฌเตเดเตเดธเดฟเดจเต เดชเตเดฑเดคเตเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ). เดเดฆเตเดฏเตเดเดฟเด JanusGraph เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเต:
graph.tx().rollback() //Never create new indexes while a transaction is active
mgmt = graph.openManagement()
name = mgmt.getPropertyKey('name')
age = mgmt.getPropertyKey('age')
mgmt.buildIndex('byNameComposite', Vertex.class).addKey(name).buildCompositeIndex()
mgmt.buildIndex('byNameAndAgeComposite', Vertex.class).addKey(name).addKey(age).buildCompositeIndex()
mgmt.commit()
//Wait for the index to become available
ManagementSystem.awaitGraphIndexStatus(graph, 'byNameComposite').call()
ManagementSystem.awaitGraphIndexStatus(graph, 'byNameAndAgeComposite').call()
//Reindex the existing data
mgmt = graph.openManagement()
mgmt.updateIndex(mgmt.getGraphIndex("byNameComposite"), SchemaAction.REINDEX).get()
mgmt.updateIndex(mgmt.getGraphIndex("byNameAndAgeComposite"), SchemaAction.REINDEX).get()
mgmt.commit()
Afterword
เดเดฐเตผเดคเตเดฅเดคเตเดคเดฟเตฝ, เดฎเตเดเดณเดฟเตฝ เดชเดฑเดเตเด เดชเดฐเตเดเตเดทเดฃเด เดเดทเตเดฎเดณเดตเตเด เดฎเตเดฆเตเดตเตเด เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดคเดพเดฐเดคเดฎเตเดฏเดฎเดพเดฃเต. เดจเดฟเดเตเดเตพ เด เดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดฟเดจเตเดคเดฟเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เด เดคเต เดซเดฒเดเตเดเตพ เดฒเดญเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดฐเต เดเตเดฐเดพเดซเต DBMS เดฎเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดชเดฐเดฟเดถเตเดงเดจเดเดณเตเดเต เดญเดพเดเดฎเดพเดฏเดฟ, เดเดคเตเดชเตเดฒเตเดณเตเดณ เดเดฐเต เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเดฎเดพเดฏเดฟ เดเดพเตป เดเดฐเต เดชเดฐเตเดเตเดทเดฃเดตเตเด เดจเดเดคเตเดคเดฟ:
g.V().hasLabel('ZoneStep').has('id',0)
.repeat(__.out().simplePath()).until(__.hasLabel('ZoneStep').has('id',1)).count().next()
เดเดคเต เดจเดเดเตเดเดพเดจเตเดณเตเดณ เดฆเตเดฐเด เดชเตเดฐเดคเดฟเดซเดฒเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เด
เดคเตเดคเดฐเด เดกเดพเดฑเตเดฑเดฏเดฟเตฝ เดชเตเดฒเตเด, เดเตเดฐเดพเดซเต เดกเดฟเดฌเดฟเดเดเดเดธเต เดเตเดฑเดเตเดเต เดจเดฟเดฎเดฟเดทเดเตเดเตพเดเตเดเดชเตเดชเตเดฑเดฎเตเดณเตเดณ เดซเดฒเดเตเดเตพ เดเดพเดฃเดฟเดเตเดเต ... เดเดคเต เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, เดเดคเตเดชเตเดฒเตเดณเตเดณ เดชเดพเดคเดเตพ เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเดคเตเดเตเดฃเตเดเดพเดฃเต 0 -> X -> Y ... -> 1
, เดเตเดฐเดพเดซเต เดเดเตเดเดฟเดจเตเด เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเต.
เดเดคเตเดชเตเดฒเตเดณเตเดณ เดเดฐเต เดเตเดฆเตเดฏเดคเตเดคเดฟเดจเต เดชเตเดฒเตเด:
g.V().hasLabel('ZoneStep').has('id',0).out().has('id',1)).count().next()
เดเดฐเต เดธเตเดเตเดเตปเดกเดฟเตฝ เดคเดพเดดเตเดฏเตเดณเตเดณ เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเต เดธเดฎเดฏเด เดเตเดฃเตเดเต เดเดจเดฟเดเตเดเต เดเตฝเดชเตเดชเดพเดฆเดจเดเตเดทเดฎเดฎเดพเดฏ เดชเตเดฐเดคเดฟเดเดฐเดฃเด เดจเตเดเดพเดจเดพเดฏเดฟเดฒเตเดฒ.
เดเดฅเดฏเตเดเต เดงเดพเตผเดฎเตเดฎเดฟเดเดค, เดฎเดจเตเดนเดฐเดฎเดพเดฏ เดเดฐเต เดเดถเดฏเดตเตเด เดฎเดพเดคเตเดเดพเดชเดฐเดฎเดพเดฏ เดฎเตเดกเดฒเดฟเดเดเตเด เดเดตเดถเตเดฏเดฎเตเดณเตเดณ เดซเดฒเดคเตเดคเดฟเดฒเตเดเตเดเต เดจเดฏเดฟเดเตเดเดฟเดฒเตเดฒ เดเดจเตเดจเดคเดพเดฃเต, เดเดคเต เดเตเดฒเดฟเดเตเดเตเดนเตเดธเดฟเดจเตเดฑเต เดเดฆเดพเดนเดฐเดฃเด เดเดชเดฏเตเดเดฟเดเตเดเต เดตเดณเดฐเต เดเดฏเตผเดจเตเดจ เดเดพเดฐเตเดฏเดเตเดทเดฎเดคเดฏเตเดเต เดชเตเดฐเดเดเดฎเดพเดเตเดเตเดจเตเดจเต. เด เดฒเตเดเดจเดคเตเดคเดฟเตฝ เด เดตเดคเดฐเดฟเดชเตเดชเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเดชเดฏเตเด เดเตเดธเต เดเตเดฐเดพเดซเต เดกเดฟเดฌเดฟเดเดเดเดธเตเดเดณเตเดเต เดตเตเดฏเดเตเดคเดฎเดพเดฏ เดตเดฟเดฐเตเดฆเตเดง เดชเดพเดฑเตเดฑเตเดฃเดพเดฃเต, เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด เด เดตเดฏเตเดเต เดฎเดพเดคเตเดเดฏเดฟเตฝ เดฎเตเดกเดฒเดฟเดเดเดฟเดจเต เด เดจเตเดฏเตเดเตเดฏเดฎเดพเดฃเตเดจเตเดจเต เดคเตเดจเตเดจเตเดจเตเดจเต.
เด เดตเดฒเดเดฌเด: www.habr.com