neo4j یک بانک اطلاعاتی گراف پایه است که جزو بانکهای اطلاعاتی no-sql طبقه بندی میشود. سرعت بسیار بالا و امکان اجرای کوئریهای پیچیده، از برجستهترین ویژگیهای این بانک اطلاعاتی است. بهترین کاربرد neo4j استفاده به عنوان مکمل برای بانک اطلاعاتیهای دیگر مثل مونگو و کاساندرا است؛ به این صورت که دیتای اصلی در دیتابیس مونگو یا کاساندرا ذخیره گردد و ایندکس این دیتاها به همراه چند پارامتر کلیدی که در کوئریها استفاده زیادی دارد در neo4j ذخیره گردد. اکثر کوئریها بر روی neo4j اجرا شوند و با استفاده از کلیدهای یافته شده، دیتای اصلی از بانک اطلاعاتی اصلی دریافت شود. این روش در پروژههای بسیار بزرگ (مثل شبکههای اجتماعی) کاربرد فراوانی دارد. همین شیوه برای استفاده از ElasticSearch نیز بسیار مرسوم است.
برای آموزش نصب neo4j در ویندوز، از این لینک و در لینوکس از این لینک استفاده کنید.
برای کار با neo4j آدرس http://127.0.0.1:7474 را درمرورگر وارد کنید و سپس وارد ویرایشگر کوئری شوید. برای بار اول، neo4j از شما نام کاربری و رمز عبوری را درخواست میکند. این نام و رمز عبور، هنگام نصب تعیین میشود. معمولآ نام کاربری آن neo4j است.
در زیر برخی دستورات ابتدایی آن آورده شده است.
ایجاد یک آبجکت و یا ویرایش آن
برای ساخت یک آبجکت و یا ویرایش آن، باید از فرم کوئری زیر استفاده کنیم. این مرحله معادل ساخت جدول در بانکهای اطلاعاتی رابطهای است.
CREATE (VariableName:objectType { guid: {keyInMainDB }, property1 :value1 ,property2 : value2 ,... )
فرم زیر، هم برای ایجاد کاربرد دارد و هم برای ویرایش. چون این فرم هر دو حالت را باهم پوشش میدهد، بیشتر استفاده میشود. هر چند در مواقعی که میخواهیم تعداد زیادی دیتا وارد بانک کنیم، حالت قبل سرعت بالاتری دارد.
MERGE (VariableName:objectType { guid: keyInMainDB }) SET VariableName +={property1: value1,property2: value2,...}
مثال واقعی:
MERGE (object:User { guid: 1353554 }) SET object +={username:"nasser" ,time_created: 1522480294 }
در مثال بالا یک آبجکت با نوع یوزر را ایجاد کردیم. با اینکار در واقع تایپ یوزر را هم به neo4j معرفی کردیم. البته هر اسمی را میتوانیم جای یوزر بگذاریم.
مقادیر عددی مستقیم، و موارد رشتهای با کوتیشن به خواص نسبت داده شدند. اسم خواص را هم ما انتخاب کردیم. علاوه بر عدد و رشته، neo4j از آرایه هم به عنوان نوع داده ورودی پشتیبانی میکند.
بازیابی یک آبجکت
برای بازیابی یک آبجکت، از فرم ساده زیر استفاده میشود:
match (VariableName:objectType ) return VariableName
برای بازیابی آبجکتی که در بالا درج شد، از مثال واقعی زیر استفاده میکنیم:
match (object:User { guid: 1353554 }) return object
میتوانیم برای بازیابی شرط هم تعیین کنیم:
match (object:User ) where object.time_created>1522480293 return object
ایجاد رابطه بین دو شیء
برای ایجاد رابطه بین دو شیء، از فرم زیر استفاده میکنیم:
MATCH (v1:objectType1 {guid: guid1}),
(v2:objectType2 {guid: guid2})
MERGE (v1)-[:RelationshipName]->(v2)
برای مثال واقعی میتوانید حالتی را در نظر بگیرید که یک کاربر، کاربر دیگری را در شبکه اجتماعی دنبال میکند. در اینجا رابطه دنبال کردن بین دو کاربر ایجاد میشود. یا حالتی که یک فرد، یک متن یا تصویر را لایک میکند، در اینجا بین آبجکت کاربر و آن آبجکت متن یا تصویر، رابطه لایک کردن ایجاد میشود.
مثال واقعی برای لایک کردن:
MATCH (usr:User {guid: 1353554 }),(img:Image {guid: 88554 })
MERGE (usr)-[:LIKE]->(img)
اسم LIKE را ما بر روی این رابطه گذاشتیم و البته هر اسم دیگری را نیز میتوانستیم بگذاریم و الزامی هم برای نوشتن با حروف بزرگ نبود. فقط برای راحتتر تفکیک کردن از سایر نوع آبجکتها، این اسم را با حرف بزرگ نوشتیم .
برای بازیابی کاربرهایی که مواردی را لایک کردهاند از فرم زیر استفاده میکنیم:
MATCH (usr:User)-[r:LIKE]-() Return usr
برای بازیابی همه مواردی که لایک شدهاند:
MATCH ()-[r:LIKE]-(n) Return n
برای بازیابی همه مواردی که یک یوزر خاص لایک کردهاست:
MATCH (usr:User{guid:1353554 })-[r:LIKE]-(n) Return n
برای بازیابی دو طرفی که در رابطه LIKE شرکت داشتهاند، از فرم زیر استفاده میکنیم:
MATCH p=()-[r:LIKE]->() RETURN p
میتوانید قسمت شرط را هم اضافه کنید و برای مثال همه کاربرانی را که از یک تاریخ خاص ایجاد شدهاند و چیزی را لایک کردهاند، بدست بیاورید:
MATCH (usr:User )-[r:LIKE]-(n) where usr.time_created>1522480293 Return usr