ç§ãã¡ã®ãããžã§ã¯ãã§ã¯æ¬¡ã®ã¿ã¹ã¯ãçºçããŸãã-æ°åäžã¬ãã«ã®å€§éã®ååãåããæ ç¹ããããŸãã å補åã«ã¯ãåçã«çæãããæ°çŸã®ç¹æ§ããããŸãã ããŸããŸãªç¹æ§ã®ã»ããã«åŸã£ãŠã補åããšã«è¿
éãªãã£ã«ã¿ãªã³ã°ãæäŸããå¿
èŠããããŸãã å¿çã®åœ¢ææéã¯0.3ç§ä»¥äžã§ããå¿
èŠããããŸããè€éãªããžãã¯ãã¹ã¿ã€ãªãã·ã¥ã«ç¶æããå¿
èŠããããŸãã
(1 = true AND (2 < 100)) OR (1 = false AND (3 > 17)) ... AND\OR
ãã®ãããªæ©èœã®å
žåçãªäŸã¯
hotline.ua/computer/myshi-klaviaturyã§ã
MySQL + Symfony2 / Doctrineã®ãã¬ãŒã ã¯ãŒã¯ã§ãã¹ãŠãå®è£
ããŠããŸãããé床ã¯äžååã§ã-åçã¯1ã10ç§ä»¥å
ã«åœ¢æãããŸãã ãã®ãã¹ãŠã®çµæžãæé©åããããšããç§ã®è©Šã¿ã¯ãåæžãããŠããŸãã
ååããã£ã«ã¿ãªã³ã°ããã¿ã¹ã¯ã®çšèªïŒç°¡ç¥åããã圢åŒïŒ
- ç¹æ§ -ååã®ç¹å®ã®ããããã£ã ããšãã°ãã¡ã¢ãªã®éã
- 補åãã³ãã¬ãŒã -åæ§ã®è£œåã®èãããããã¹ãŠã®ç¹æ§ã®ã»ãããããšãã°ã³ã³ãã¥ãŒã¿ãŒããŠã¹ã®èããããç¹æ§ã®ãªã¹ãã æ°ãã補åã远å ãããšãã管çè
ã¯ãã³ãã¬ãŒãå
ã®ç¹æ§ãéžæã§ããŸãã 1ã€ã®è£œåã«æ°ããç¹æ§ã远å ããããšã¯ã§ããŸããããã®è£œåã®ãã³ãã¬ãŒãã«ç¹æ§ã远å ããå¿
èŠããããŸãã åæã«ããã®ãã³ãã¬ãŒãã䜿çšãããã¹ãŠã®è£œåã§ãã®æ©èœã䜿çšã§ããŸãã
- 補åã°ã«ãŒã -1ã€ã®ãã³ãã¬ãŒãã«åºã¥ã補åã ããšãã°ãã³ã³ãã¥ãŒã¿ãŒã®ããŠã¹ã ãã£ã«ã¿ãªã³ã°ã¯ã1ã€ã®ã°ã«ãŒãã®è£œåã«å¯ŸããŠã®ã¿è¡ãããŸãã
- åºæº -ååã®ç¹æ§ã«é¢ããäžé£ã®æ£åŒãªèŠä»¶ã§æ§æãããè«çã«ãŒã«ã ããšãã°ããã²ãŒãã³ã°ããŠã¹ãã¯ãäžé£ã®ããã©ãŒãã³ã¹èŠä»¶ïŒãµã€ãºã¯å°åã§ã¯ãããŸããïŒANDïŒã¬ãŒã¶ãŒã»ã³ãµãŒïŒANDïŒå°ãªããšã1500ã®ã»ã³ãµãŒè§£å床ïŒã§ã
- ãã£ã«ã¿ãŒ -é¡äŒŒè£œåã®åºæºã®ã°ã«ãŒãã åºæºã«å¿ããŠãANDãŸãã¯ORã§çµåã§ããŸã
Hotlineã«ã¯ãããé«åºŠãªããŒãžã§ã³ããããŸã-åºæºã®æå¹ååŸã«æ®ã£ãŠãã補åã®æ°ã瀺ããã³ãããããŸãã ããšãã°ããBluetoothããã£ã«ã¿ãŒãéžæããå ŽåãããŒãžãèªã¿èŸŒãã åŸããããŠã¹ã»ã³ãµãŒã¿ã€ãã¯å
åŠããã£ã«ã¿ãŒã®çªå·ã¯17ã«ãªããŸãããã®æŽ»æ§åã
ãã®åé¡ã解決ããããã«ã
Neo4jã°ã©ãããŒã¿ããŒã¹ã詊ããŠã¿ãããšã«ããŸããã 衚é¢çãªã¬ãã¥ãŒã«ã€ããŠã¯ã
ãã®æçš¿ãèªãããšããå§ãããŸãã
Neo4jã®çšèªãšäžè¬çãªã°ã©ãããŒã¿ããŒã¹ã
- ã°ã©ãããŒã¿ããŒã¹ ã ã°ã©ãããŒã¿ããŒã¹ -ã°ã©ãäžã«æ§ç¯ãããããŒã¿ããŒã¹-ããŒããšãããã®éã®é¢ä¿
- Cypher -Neo4jããŒã¿ããŒã¹ã«ã¯ãšãªãæžã蟌ãããã®èšèªïŒãããããMYSQLã®SQLãšåæ§ïŒ
- node ã node-ããŒã¿ããŒã¹å
ã®ãªããžã§ã¯ããã°ã©ãããŒãã ããŒãã®æ°ã¯ã2ã®350ã340åä¹ã«å¶éãããŠããŸãã
- ããŒãã©ãã« ã ããŒãã©ãã« -æ¡ä»¶ä»ãã®ãããŒãã¿ã€ãããšããŠäœ¿çšãããŸãã ããšãã°ãæ ç»ã¿ã€ãã®ããŒãã¯ã俳åªã¿ã€ãã®ããŒãã«é¢é£ä»ããããšãã§ããŸãã ã©ãã«ããŒãã§ã¯å€§æåãšå°æåãåºå¥ãããééã£ãã¬ãžã¹ã¿ã«ååãå
¥åããŠãCypherã¯ãšã©ãŒãçæããŸããã
- é¢ä¿ ã éä¿¡ -2ã€ã®ããŒãéã®æ¥ç¶ãã°ã©ãã®ç«¯ã åµåžã®æ°ã¯ã2ã®35ã34åä¹ã«å¶éãããŠããŸãã
- relation identirfier ã æ¥ç¶ã®ã¿ã€ãã¯æ¥ç¶ã® Neo4jã§ãã ãªã³ã¯ã¿ã€ãã®æå€§æ°ã¯32767ã§ã
- ãããã㣠ã ããŒããããã㣠- ããŒãã«å²ãåœãŠãããšãã§ããããŒã¿ã®ã»ããã ããšãã°ãããŒãã補åã®å ŽåãããŒãã®ããããã£ã«MySQLããŒã¿ããŒã¹ã®è£œåIDãä¿åã§ããŸã
- ããŒãID ã ããŒãID-ããŒãã®äžæã®èå¥åã ããã©ã«ãã§ã¯ãçµæã衚瀺ãããšããã®IDã衚瀺ãããŸãã Cypherãªã¯ãšã¹ãã§äœ¿çšããæ¹æ³ãèŠã€ãããŸããã§ãã
åé¡ã解決ããããã®ã¹ããŒã
補åããšã«åå¥ã®ããŒããäœæããããŒãã®ããããã£ã§MySQLããŒã¿ããŒã¹ã«è£œåIDãä¿åããŸãã ååºæºã«ã€ããŠãç¬èªã®ããŒããäœæããããããã£ã«åºæºã®IDãä¿åããŸãã æ¬¡ã«ãååã®ãã¹ãŠã®ããŒãããååã«é©ããåºæºã®ããŒãã«é¢é£ä»ããŸãã 補åã®ç¹æ§ãŸãã¯åºæºããããã£ã倿Žããå ŽåãããŒãéã®é¢ä¿ãæŽæ°ããŸãã
æåã®è§£æ±ºçã¯Neo4jã䜿çšããããšã§ã
ã°ã©ãããŒã¿ããŒã¹ã§äœæ¥ããããšããªãããšãèæ
®ããŠãNeo4jãããŒã«ã«ã«å±éããCypherãåºæ¬ã¬ãã«ã§åŠç¿ããå¿
èŠãªããžãã¯ãå®è£
ããããšã決ããŸããã ãã¹ãŠããŸãããã°ãããããã500ã®ç¹æ§ãæã€100äžã®è£œåã®ããŒã¿ããŒã¹ã®äœæ¥é床ããã¹ãããŸãã
ã·ã¹ãã ã®å±éã¯éåžžã«ç°¡åã§ã-
é
åžããããããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããŸãã
Neo4jãµãŒããŒã«ã¯RestAPIããããphpã«ã¯
neo4jphpã©ã€ãã©ãªã
ãããŸãã Symfony2ãšã®çµ±åçšã®ãã³ãã«
-klaussilveira / neo4j-ogm-bundleããããŸãã
ãã£ã¹ããªãã¥ãŒã·ã§ã³ã«ã¯ãããã©ã«ãã§
httpïŒ// localhostïŒ7474 /ã§åäœããWebãµãŒããŒãšã¢ããªã±ãŒã·ã§ã³ãå«ãŸããŸã
ä»ã®æ©èœãåã
ãå€ãããŒãžã§ã³ã®clientããŸã ãããŸãã
ç°¡åãªããã¥ã¡ã³ããããã¥ã¡ã³ããšããŠäœ¿çšãããšäŸ¿å©ã§ãã
ã³ãŒãäŸã¯graphgistã«ãããŸãã çè«çã«ã¯ãããã§ãªã³ã©ã€ã³ã§å®è¡ããå¿
èŠããããŸãããçŸåšã¯æ©èœããŸããã ã³ãŒãã衚瀺ããã«ã¯ã
graphgist ïŒããšãã°ã
ãã ïŒããã®ãªã³ã¯ããã©ã£ãŠã[ããŒãžãœãŒã¹]ãã¿ã³ãã¯ãªãã¯ããå¿
èŠããããŸãã
Neo4jã䜿çšããå®éšã§ã¯ã
çµã¿èŸŒã¿ã®Webã¯ã©ã€ã¢ã³ãã䜿çšãããšéåžžã«äŸ¿å©ã§ãCypherãªã¯ãšã¹ããå®è¡ããããŒãã®æ¥ç¶ãšç¹æ§ãšãšãã«ãªã¯ãšã¹ããžã®å¿çã衚瀺ã§ããŸãã
åçŽãªæå·ã³ãã³ãã©ãã«ä»ãã®ããŒããäœæãã create (n:Ware {wareId: 1});
ãã¹ãŠã®ããŒããéžæ MATCH (n) RETURN n
ã«ãŠã³ã¿ãŒ MATCH (n:Ware {wareId:1}) RETURN "Our graph have "+count(*)+" Nodes with label Ware and wareId=1" as counter
2ã€ã®é¢é£ããŒããäœæãã CREATE (n{wareId:1})-[r:SUIT]->(m{criteriaId:1})
2ã€ã®æ¢åã®ããŒãããªã³ã¯ãã MATCH (a {wareId: 1}), (b {criteriaId: 2}) MERGE (a)-[r:SUIT]->(b)
é¢é£ãããã¹ãŠã®ããŒããåé€ãã match (n)-[r]-() DELETE n,r;
ãã¹ãŠã®ç¡é¢ä¿ãªããŒããåé€ããŸã-é¢ä¿ããããŒããããããŒã¿ããŒã¹ã§ãã®ã³ãã³ããå®è¡ããããšãããšãæ©èœããŸããã æåã«é¢é£ããããŒããåé€ããå¿
èŠããããŸãã
match n DELETE n;
åºæºã«äžèŽãã補åãéžæ3 MATCH (a:Ware)-->(b:Criteria {criteriaId: 3}) RETURN a
äžåºŠã«ããã€ãã®Cypherã³ãã³ããWebã¯ã©ã€ã¢ã³ããå®è¡ã§ããŸããã 圌ãã¯
å€ãã¯ã©ã€ã¢ã³ãããã®æ¹æ³ãç¥ã£ãŠãããšèšãããç§ã¯ãã®ãããªæ©äŒãèŠã€ããããªãã£ãã ãããã£ãŠã1è¡ãã³ããŒããå¿
èŠããããŸãã
1ã€ã®ã³ãã³ãã§ãªã³ã¯ãæã€è€æ°ã®ããŒããäœæã§ããŸããããŒãã«ç°ãªãååãä»ããå¿
èŠããããŸãããªã³ã¯ã«ååãä»ããããšã¯ã§ããŸãã
CREATE (w1:Ware{wareId:1})-[:SUIT]->(c1:Criteria{criteriaId:1}), (w2:Ware{wareId:2})-[:SUIT]->(c2:Criteria{criteriaId:2}), (w3:Ware{wareId:3})-[:SUIT]->(c3:Criteria{criteriaId:3}), (w4:Ware{wareId:4})-[:SUIT]->(c1), (w5:Ware{wareId:5})-[:SUIT]->(c1), (w4)-[:SUIT]->(c2), (w5)-[:SUIT]->(c3);
ãã®ãããªæ§é ãååŸããŸãã èŠãã«ããå Žåã¯ãããŠã¹ã䜿çšããŠããŒããåé
眮ã§ããŸãã

äžçŽNeo4jé床ãã¹ã
ä»åºŠã¯ãããŒã¿ããŒã¹ãšå€§èŠæš¡ãªããŒã¿ããŒã¹ããã®åçŽãªãµã³ãã«ãåããé床ããã¹ãããŸãã
ãããè¡ãã«ã¯ãneo4jphpã®ã¯ããŒã³ãäœæããŸã
git clone https:
ãã®ã©ã€ãã©ãªã®åºæ¬çãªèª¬æã¯ãã®
æçš¿ã«ãããŸãã®ã§ãããã«ãµã³ãã«/ test_fill_1.phpãã¹ãããŒã¹ãäœæããã³ãŒããã¬ã€ã¢ãŠãããŸã
<?php use Everyman\Neo4j\Client, Everyman\Neo4j\Index\NodeIndex, Everyman\Neo4j\Relationship, Everyman\Neo4j\Node, Everyman\Neo4j\Cypher; require_once 'example_bootstrap.php'; $neoClient = new Client(); $neoWares = new NodeIndex($neoClient, 'Ware'); $neoCriterias = new NodeIndex($neoClient, 'Criteria'); $neoWareLabel = $neoClient->makeLabel('Ware'); $neoCriteriaLabel = $neoClient->makeLabel('Criteria'); $wareTemplatesCount = 200;
ç§ã¯å€ã®ããã«åºå°ãåããããã®ã¹ã¯ãªãããæ®ããŸããã çŽ4æéåŸãã¹ã¯ãªããã¯ããŒã¿ã®è¿œå ã忢ããNeo4jãµãŒãã¹ã¯ãµãŒããŒã®100ïŒ
ã®ããŒããéå§ããŸããã ååäžãäœæ¥ã®çµæã«ãããšã8ã€ã®ã«ããŽãªãŒã®ååãã78,300ã®è£œåãæ¿å
¥ãããŸããã
ããŒã¿ããŒã¹ã®ãã¹ãå
¥åã®çµæã¯ã200ã400ã®æ¥ç¶ã§1ç§ãããçŽ20補åã§ãã ããã»ã©é«ãçµæã§ã¯ãããŸãã-MysqlãšCassandraã¯ã1ç§ãããçŽ10ã2äžã®æ¿å
¥ïŒ10ãã£ãŒã«ãã1ã€ã®ãã©ã€ããªã€ã³ããã¯ã¹ã1ã€ã®ã€ã³ããã¯ã¹ïŒãçæããŸããã ãã ããæ¿å
¥é床ã¯éèŠã§ã¯ãããŸããã補åãç·šéããåŸãããã¯ã°ã©ãŠã³ãã§ããŒã¿ã°ã©ããæŽæ°ã§ããŸãã ãã ããããŒã¿ãµã³ããªã³ã°ã®é床ã¯éèŠã§ãã
ãã£ã¹ã¯äžã®ãã¹ãããŒã¿ããŒã¹ã®ãµã€ãºã¯1781ã¡ã¬ãã€ãã§ãã 78,300ã®è£œåã4,000ã®åºæºã156.66äžãã31320000ã®æ¥ç¶ãä¿åããŸãã ãªããžã§ã¯ãïŒããŒããšãªã³ã¯ïŒã®ç·æ°ã¯3,200äžæªæºã§ããšã³ãã£ãã£ãããå¹³å55ãã€ãã§ãã ç§ã«ã€ããŠã¯å°ãã§ãããäž»ãªèŠä»¶ã¯ãµã³ãã«ã®é床ã§ãããããŒã¿ããŒã¹ã®ãµã€ãºã§ã¯ãããŸããã
ãµã³ããªã³ã°é床ããã¹ãããæåã®è©Šã¿ã¯å€±æããŸãã-Neo4jãµãŒããŒã¯åã³100ïŒ
ããã»ããµè² è·ã¢ãŒãã«ãç§»è¡ãããæ°åã§ãªã¯ãšã¹ãã«å¿çããŸããã§ããã
MATCH (c {criteriaId: 1})<--(a)-->(b {criteriaId: 3}) RETURN a.wareId;
å
ã«é²ãã«ã¯ãNeo4jã§ãªã¯ãšã¹ããæé©åããæ¹æ³ãçè§£ããå¿
èŠããããŸãã æåã¯ãSTARTåœä»€ã䜿çšããŠãéžæç¯å²å
ã®ããŒãã®éå§ã»ãããå¶éãããã£ã
START n=node:nodeIndexName(key={value}) MATCH (c)<
ãããè¡ãã«ã¯ãããŒã¿ããŒã¹ã«ã€ã³ããã¯ã¹ãå¿
èŠã§ãã Neo4jã§ã¯ãçŸåšã®ã€ã³ããã¯ã¹ã®ãªã¹ãã衚瀺ããã³ãã³ãã¯èŠã€ãããŸããã§ããã
ãNeo4j Webã¢ããªã±ãŒã·ã§ã³ã§ã¯ã³ãã³ããå
¥åã§ããŸã
:schema
次ã®ã³ãã³ãã§
ã€ã³ããã¯ã¹ã远å ã§ããŸã CREATE INDEX ON :Criteria(criteriaId)
ããŒã ã
äžæã®ã€ã³ããã¯ã¹ãäœæã§ããŸã
CREATE CONSTRAINT ON (n:Criteria) ASSERT n.criteriaId IS UNIQUE;
äžèšã®ã³ãã³ãã§è¿œå ãããã€ã³ããã¯ã¹ã¯ãSTARTãã£ã¬ã¯ãã£ãã§ã¯äœ¿çšã§ããŸããã 圌ãã¯ã©ãã§ãã䜿çšã§ããªããšäž»åŒµããŠãã
Cypherãä»ããŠäœæãããã€ã³ããã¯ã¹ã¯ã¹ããŒãã€ã³ããã¯ã¹ãšåŒã°ããSTARTå¥ã§ã¯äœ¿çšãããŸããã STARTå¥ã®ã€ã³ããã¯ã¹ã«ãã¯ã¢ããã¯ãèªåã€ã³ããã¯ã¹äœæãŸãã¯éæå·åAPIãä»ããŠäœæããã¬ã¬ã·ãŒã€ã³ããã¯ã¹çšã«äºçŽãããŠããŸãã
äœæãããŠãŒã¶ãŒã€ã³ããã¯ã¹ã䜿çšããã«ã¯ã次ã®ããã«ããŸãã
ãããnïŒãŠãŒã¶ãŒ
ããã§ãn.name = "aapo"
nãè¿ããŸãã
ããã¥ã¡ã³ããæ£ããçè§£ããŠããã°ãSTARTã®ä»£ããã«WHEREãå®å
šã«äœ¿çšã§ããŸãã
STARTã¯ãªãã·ã§ã³ã§ãã æç€ºçãªéå§ç¹ãæå®ããªãå ŽåãCypherã¯ã¯ãšãªããéå§ç¹ãæšæž¬ããããšããŸãã ããã¯ãã¯ãšãªã«å«ãŸããããŒãã©ãã«ãšè¿°èªã«åºã¥ããŠè¡ãããŸãã 詳现ã«ã€ããŠã¯ã第14ç« ãã¹ããŒããåç
§ããŠãã ããã äžè¬ã«ãSTARTå¥ã¯ãã¬ã¬ã·ãŒã€ã³ããã¯ã¹ã䜿çšããå Žåã«ã®ã¿æ¬åœã«å¿
èŠã§ãã
æåã®ä»äºã®äŸé ŒãçãŸããŸãã
MATCH (a:Ware)-->(c1:Criteria {criteriaId: 3}),(c2:Criteria {criteriaId: 1}),(c3:Criteria {criteriaId: 2}) WHERE (a)-->(c2) AND (a)-->(c3) RETURN a;
ãã¹ãããŒã¿ããŒã¹ã«ã€ã³ããã¯ã¹ãèŠã€ãããªãã£ãããããã¹ãçšã«å¥ã®ããŒã¿ããŒã¹ãå¥ã®æ¹æ³ã§äœæããŸãã Neo4jã§ç¬ç«ããããŒã¿ã»ããïŒMySQLã®ããŒã¿ããŒã¹ã®é¡äŒŒç©ïŒãäœæããæ©èœãèŠã€ãããŸããã§ããã ãããã£ãŠããã¹ãã®ããã«ãNeo4j CommunityïŒããŒã¿ããŒã¹ã®å ŽæïŒã®èšå®ã§ããŒã¿ã¹ãã¢ãžã®ãã¹ã倿ŽããŸãã

æ³šææ·±ãèªè
ã¯ãtest_fill_1.phpã³ãŒãã«ããã€ãã®ã³ã¡ã³ããèŠã€ãããããããŸããã
$c = $neoClient->makeNode()->setProperty('criteriaId', $wareTemplateId * $criteriasCount + $criteriaId)->save(); // ->addLabels(array($neoCriteriaLabel)) - commitBatch $neoCriterias->add($c, 'criteriaId', $wareTemplateId * $wareTemplatesCount + $criteriaId); // ->save()
Neo4jphpã®ãããã¢ãŒãã§ã¯ãããŒãã«ã©ãã«ã远å ã§ãããäœããã®çç±ã§ã€ã³ããã¯ã¹ãä¿åãããŸããã§ããã Cypherãäžåœèªã®æçŽã§ãªããªã£ãããšãèãããšãçŽç²ãªCypherã§ããŒã¿ããŒã¹ã®ããŒãã³ã¢ãåããããšã«ããŸããã ã ãããtest_fill_2.phpã«ãªããŸãã
<?php use Everyman\Neo4j\Client, Everyman\Neo4j\Index\NodeIndex, Everyman\Neo4j\Relationship, Everyman\Neo4j\Node, Everyman\Neo4j\Cypher; require_once 'example_bootstrap.php'; $neoClient = new Client(); $wareTemplatesCount = 100;
ããŒã¿ã远å ããé床ã¯ã第1ã®å®æœåœ¢æ
ãããäºæ³ä»¥äžã«éãã£ãã
30,000åã®ããŒããšcypheräžã®500,000ã1,000,000åã®æ¥ç¶ã远å ãããã¹ãã¹ã¯ãªããã¯140ç§éæ©èœããããŒã¿ããŒã¹ã¯62 MBã®ãã£ã¹ã¯ã¹ããŒã¹ã䜿çšããŸããã $ waresCount = 1000ïŒ10,000åã®è£œåã¯èšããŸã§ããªãïŒã§ã¹ã¯ãªãããå®è¡ããããšãããšããã¹ã¿ãã¯ãªãŒããŒãããŒãšã©ãŒããšã©ãŒã衚瀺ãããŸããã ã䜿çšããŠã¹ã¯ãªãããæžãçŽããŸããã
MATCH (a {wareId: 1}), (b {criteriaId: 2}) MERGE (a)-[r:SUIT]->(b)
ããã«ãã壿»
çãªé床äœäžãçããä¿®æ£ãããã¹ã¯ãªããã¯çŽ1æéåããŸããã
ããã€ãã®åºæºã§ãµã³ããªã³ã°é床ããã¹ãã
ãåŸã§é«éããŒã¿æ¿å
¥ã®åé¡ã«æ»ãããšã«ããŸããã
<?php use Everyman\Neo4j\Client, Everyman\Neo4j\Index\NodeIndex, Everyman\Neo4j\Relationship, Everyman\Neo4j\Node, Everyman\Neo4j\Cypher; require_once 'example_bootstrap.php'; $neoClient = new Client(); $time = microtime(); $query = new Cypher\Query($neoClient, "MATCH (a:Ware)-->(b:Criteria {criteriaId: 3}),(c:Criteria {criteriaId: 1}),(c2:Criteria {criteriaId: 2}) WHERE (a)-->(c) AND (a)-->(c2) RETURN a;", array()); $result = $query->getResultSet(); print "Done in ".(microtime() - $time)." seconds\n";
äžèšã®ã¹ã¯ãªããã¯0.02ç§ã§æ©èœããŸããã äžè¬ã«ãããã¯ãŸã£ãã蚱容ã§ããŸãããååã®ããããã£ãæŽæ°ãããšãã«ããŒãéã®å€æ°ã®æ¥ç¶ãè¿
éã«ç¶æããæ¹æ³ã®åé¡ã¯æ®ããŸãã
代æ¿ãœãªã¥ãŒã·ã§ã³
MySQLããªããžããªãšããŠäœ¿çšããããšããè¯å¿ãåãé€ããããšã«ããŸããã ããŒãéã®ãªã³ã¯ã¯ãè¿œå æ
å ±ãªãã§å¥ã®ããŒãã«ã«ä¿åãããŸãã
CREATE TABLE IF NOT EXISTS `edges` ( `criteriaId` int(11) NOT NULL, `wareId` int(11) NOT NULL, UNIQUE KEY `criteriaId` (`criteriaId`,`wareId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以äžã®ããŒã¿ããŒã¹ãåããããã®ãã¹ãã¹ã¯ãªãã
<?php mysql_connect("localhost", "root", ""); mysql_select_db("test_nodes"); $wareTemplatesCount = 100; $criteriasCount = 50; $waresCount = 250; $minRelations = 20; $maxRelations = 40; $time = time(); for($wareTemplateId = 0;$wareTemplateId<$wareTemplatesCount;$wareTemplateId++) { $criterias = array(); for($criteriaId = 1;$criteriaId <=$criteriasCount;$criteriaId++) { $criterias[] = $wareTemplateId * $criteriasCount + $criteriaId; } for($wareId = 1;$wareId <=$waresCount;$wareId++) { $edges = array(); $wId = $wareTemplateId * $waresCount + $wareId; $links = array_rand($criterias,rand($minRelations,$maxRelations)); foreach($links as $linkId) { $edges[] = "(".$criterias[$linkId].",".$wareId.")"; }
ããŒã¿ããŒã¹ã®å
¥åã«ã¯12ç§ããããŸããã ããŒãã«ã®ãµã€ãºã¯37ã¡ã¬ãã€ãã§ãã 2ã€ã®åºæºã«ããæ€çŽ¢ã«ã¯0.0007ç§ããããŸã
SELECT e1.wareId FROM `edges` AS e1 JOIN edges AS e2 ON e1.wareId = e2.wareId WHERE e1.criteriaId =17 AND e2.criteriaId =31
å¥ã®ãªãã·ã§ã³
mysqlã«ã¯å®å
šãª
ã°ã©ãããŒã¿ãŠã§ã¢ããŠã¹ããããŸããããã¹ãããŠããŸããã ããã¥ã¡ã³ããã倿ãããšãNeo4jãããã¯ããã«åå§çã§ãã
çµè«
Neo4jã¯éåžžã«ã¯ãŒã«ãªãã®ã§ãã Neo4jã§ãç§ã奜ããªãã¥ãŒãžã·ã£ã³ãæžãããµãŠã³ããã©ãã¯ã鳎ããæ ç»ã«åºæŒããæ ç»ä¿³åªã奜ããªãŠãŒã¶ãŒã®é£çµ¡å
ãéžæããããšãã£ãèŠæ±ã¯ç°¡åã«è§£æ±ºãããŸãã ãã®ãããªãã®
MATCH (me:User {userId:123})-[:Like]->(musicants:User)-[:Author]->(s:Soundtrack)-[:Used]->(f:Film)<-[:Starred]-(actor: User)<-[:Like]-(u:User) RETURN u
SQLã®å Žåãããã¯ã¯ããã«é¢åãªäœæ¥ã§ãã
å®å
šãªã°ã©ãããŒã¿ããŒã¹ãšMySQLã®è£žã®ã€ã³ããã¯ã¹ããŒãã«ãæ¯èŒããããšã¯æ£ãããã
ãŸããããç§ã®åé¡ã®è§£æ±ºçã®äžéšãšããŠãNeo4jã䜿çšããŠãå©ç¹ã¯ãããŸããã§ãã ã
æŽæ° ç»åã®URLã倿ŽããŸãããçè«çã«ã¯ããããã¯ãã¹ãŠããŒãããå¿
èŠããããŸãã
æŽæ°2 ã 圌ãã¯ããã«ããã€ãã®ãªãã·ã§ã³ãææ¡ããŸãã-MongoDBãelasticsearchãsolrãsphinxãOrientDBã MongoDBããã¹ãããäºå®ã§ãããã¹ãçµæãããã«æçš¿ããŸãã