Thứ sáu, 12/06/2015 | 00:00 GMT+7

Cách cài đặt và sử dụng ArangoDB trên Ubuntu 14.04

ArangoDB là một database NoSQL. Nó được tạo ra vào năm 2011, khi nhiều database NoSQL đã có mặt, với mục tiêu là một giải pháp database toàn diện có thể bao gồm nhiều trường hợp sử dụng khác nhau.

Về cốt lõi của nó ArangoDB là một kho lưu trữ tài liệu nhưng đó mới chỉ là khởi đầu. Bạn có thể truy vấn dữ liệu bằng ngôn ngữ truy vấn chính thức (có tên AQL), thực hiện các giao dịch tuân theo ACID , thêm điểm cuối HTTP tùy chỉnh ở dạng ứng dụng JavaScript với V8 được nhúng của nó, v.v.

Vì ArangoDB có rất nhiều tính năng nên thoạt đầu có thể đáng sợ, nhưng sau khi nhìn lại thì nó không phức tạp chút nào. Bài viết này sẽ giúp bạn cài đặt ArangoDB và sẽ giới thiệu ngắn gọn về cách sử dụng một số tính năng cốt lõi của nó.

Sau khi hoàn thành hướng dẫn này, bạn có thể :

  • Cài đặt ArangoDB trên Ubuntu 14.04
  • Cấu hình ArangoDB để sử dụng cơ bản
  • Chèn, sửa đổi và truy vấn dữ liệu

Khái niệm cốt lõi

Trong suốt bài viết, ta sẽ sử dụng một số khái niệm cốt lõi. Có thể bạn cần tự làm quen với chúng trước khi xây dựng một dự án trên ArangoDB:

  • Lưu trữ tài liệu : ArangoDB lưu trữ dữ liệu trong tài liệu, trái ngược với cách database quan hệ lưu trữ dữ liệu. Tài liệu là cấu trúc dữ liệu tùy ý bao gồm các cặp key-value . Khóa là một chuỗi đặt tên giá trị (giống như một cột trong database quan hệ). Giá trị có thể là bất kỳ kiểu dữ liệu nào, thậm chí là tài liệu khác. Tài liệu không bị ràng buộc với bất kỳ schemas nào.

  • Ngôn ngữ truy vấn : Tương tác với dữ liệu bằng cách sử dụng API hoặc ngôn ngữ truy vấn. Trong khi ngôn ngữ trước để lại rất nhiều chi tiết cho user API, một ngôn ngữ truy vấn chuyển giao chi tiết cho database . Trong database quan hệ, SQL là một exampel của một ngôn ngữ truy vấn.

  • ACID : Bốn thuộc tính A tomicity, C onsistency, I solation và D urability mô tả sự đảm bảo của các giao dịch database . ArangoDB hỗ trợ các giao dịch tuân theo ACID.

  • V8 : Công cụ JavaScript của Google hỗ trợ Chrome cũng có thể dễ dàng được nhúng vào phần mềm khác. Sử dụng nó trong ArangoDB cho phép sử dụng JavaScript bên trong database . Phần lớn chức năng bên trong của ArangoDB được xây dựng bằng JavaScript.

  • API HTTP : ArangoDB cung cấp một API HTTP để cho phép khách hàng tương tác với database . API được định hướng tài nguyên và có thể được mở rộng bằng JavaScript.

Yêu cầu

Trước khi ta bắt đầu, hãy đảm bảo Server được cài đặt chính xác:

  • Tạo một server với Ubuntu 14.04 x64

  • Thêm user sudo

Đến đây bạn nên đăng nhập vào server của bạn bằng user mới được tạo. Tất cả các ví dụ trong hướng dẫn có thể được thực hiện từ folder chính của user :

  • cd ~

Bước 1 - Cài đặt ArangoDB

ArangoDB được tạo sẵn cho nhiều hệ điều hành và bản phân phối. Khả năng cao là bạn không cần phải xây dựng nó từ nguồn. Để biết thêm chi tiết, vui lòng tham khảo tài liệu ArangoDB. Đối với hướng dẫn này, ta sẽ sử dụng Ubuntu 14.04 x64.

Vì ArangoDB sử dụng dịch vụ xây dựng của OpenSUSE, điều đầu tiên là download public key cho các kho của nó:

  • wget https://www.arangodb.com/repositories/arangodb2/xUbuntu_14.04/Release.key

Bạn cần sudo để cài đặt khóa:

  • sudo apt-key add Release.key

Tiếp theo, thêm repository apt và cập nhật index :

  • sudo apt-add-repository 'deb https://www.arangodb.com/repositories/arangodb2/xUbuntu_14.04/ /'
  • sudo apt-get update

Cài đặt ArangoDB:

  • sudo apt-get install arangodb

Ta có thể kiểm tra xem mọi thứ có diễn ra tốt không bằng cách truy vấn API HTTP:

  • curl http://localhost:8529/_api/version

Kết quả sau cho biết ArangoDB đang hoạt động:

Output
{"server":"arango","version":"2.5.5"}

Bước 2 - Truy cập Dòng lệnh bằng arangosh

ArangoDB đi kèm với arangosh , một ứng dụng client dòng lệnh cho phép bạn truy cập đầy đủ vào database thông qua thời gian chạy JavaScript của nó. Bạn có thể sử dụng nó để chạy các việc quản trị hoặc tập lệnh trong production .

Nó cũng rất phù hợp để bắt đầu với ArangoDB và chức năng cốt lõi của nó. Để làm theo, hãy bắt đầu một phiên arangosh như sau:

  • arangosh

Kết quả về cơ bản là một JavaScript shell nơi bạn có thể chạy mã JavaScript tùy ý. Ví dụ, thêm hai số:

  • 23 + 19

Bạn sẽ nhận được kết quả này:

Output
42

Nếu bạn muốn tìm hiểu sâu hơn về chủ đề này, hãy nhập tutorial vào shell.

Bước 3 - Thêm user database

Vì lý do bảo mật, chỉ có thể thêm user từ giao diện dòng lệnh arangosh . Bạn vẫn phải ở trong vỏ arangosh từ bước trước.

Bây giờ hãy thêm một user mới, sammy . User này sẽ có quyền truy cập vào toàn bộ database . Điều này hiện có thể chấp nhận được, nhưng bạn có thể cần tạo nhiều user hạn chế hơn trong môi trường production . Sử dụng password an toàn.

  • require("org/arangodb/users").save("sammy", "password");

Bây giờ thoát khỏi shell arangosh :

  • exit

Bước 4 - Cấu hình giao diện web

ArangoDB xuất xưởng với giao diện web rất mạnh mẽ. Nó cung cấp khả năng giám sát, duyệt dữ liệu, tài liệu API tương tác, trình soạn thảo truy vấn mạnh mẽ và thậm chí là một arangosh tích hợp. Ta sẽ tập trung vào việc sử dụng giao diện web cho dấu nhắc của hướng dẫn này.

Để làm cho giao diện web dễ dàng truy cập, ta cần thực hiện một số chuẩn bị:

  1. Cài đặt xác thực

  2. Liên kết ArangoDB với network interface công cộng

Cài đặt xác thực

ArangoDB, giống như nhiều database NoSQL khác, có tính năng xác thực bị vô hiệu hóa. Bạn nên cài đặt xác thực nếu bạn chạy ArangoDB trong môi trường chia sẻ và / hoặc muốn sử dụng giao diện web. Để biết thêm chi tiết về chủ đề này, vui lòng tham khảo tài liệu ArangoDB .

Kích hoạt xác thực trong file /etc/arangodb/arangod.conf . Bạn có thể chạy lệnh này để tạo file backup và đặt thông số disable-authentication thành no :

  • sudo sed -i.bak 's/disable-authentication = yes/disable-authentication = no/g' /etc/arangodb/arangod.conf

Ngoài ra, hãy sử dụng editor để đặt tham số disable-authentication thành no .

Khởi động lại database :

  • sudo service arangodb restart

Liên kết ArangoDB với Giao diện Mạng Công cộng

Cấu hình ArangoDB để nghe trên network interface công cộng. Đầu tiên, mở file /etc/arangodb/arangod.conf để chỉnh sửa:

  • sudo nano /etc/arangodb/arangod.conf

Định vị dòng endpoint đang hoạt động, dòng này phải ở cuối khối [server] bên dưới phần ví dụ. Cập nhật cài đặt như được hiển thị bên dưới, sử dụng địa chỉ IP server của bạn và cổng 8529 .

/etc/arangodb/arangod.conf
 . . .  endpoint = tcp://your_server_ip:8529 

arangosh sử dụng cấu hình mặc định của riêng nó, ta cũng cần thay đổi điểm cuối trong file /etc/arangodb/arangosh.conf :

  • sudo nano /etc/arangodb/arangosh.conf

, hãy đảm bảo dòng endpoint được đặt thành tcp:// your_server_ip :8529 .

/etc/arangodb/arangosh.conf
pretty-print = true  [server] endpoint = tcp://your_server_ip:8529 disable-authentication = true  . . .  

Nếu bạn muốn chạy hai lệnh nhiều phần, một dòng để cập nhật hai file này, bạn có thể chạy các lệnh sau để thay thế:

  • sudo sed -i.bak "s/^endpoint = .*/endpoint = tcp:\/\/$(sudo ifconfig eth0 | grep "inet " | cut -d: -f 2 | awk '{print $1}'):8529/g" /etc/arangodb/arangod.conf
  • sudo sed -i.bak "s/^endpoint = .*/endpoint = tcp:\/\/$(sudo ifconfig eth0 | grep "inet " | cut -d: -f 2 | awk '{print $1}'):8529/g" /etc/arangodb/arangosh.conf

Các lệnh trông phức tạp này sẽ extract địa chỉ IP công cộng hiện tại và thay thế các địa chỉ ràng buộc mặc định ( 127.0.0.1 ). Đừng lo lắng, tùy chọn -i.bak tạo cập nhật trước khi thay đổi cấu hình.

Bây giờ khởi động lại ArangoDB :

  • sudo service arangodb restart

Bước 5 - Truy cập Giao diện Web ArangoDB

Đến đây bạn sẽ có thể truy cập giao diện web trong trình duyệt của bạn :

http://your_server_ip:8529 

Vui lòng đăng nhập bằng tên user và password bạn đã tạo cho database ở Bước 3.

Cảnh báo: Mặc dù ta đã cài đặt xác thực nhưng quá trình truyền tải vẫn chưa được bảo mật. Trong quá trình production , bạn nên cài đặt mã hóa TLS nếu bạn làm cho ArangoDB có thể truy cập được từ một server khác.

Màn hình đầu tiên bạn sẽ thấy là console với các số liệu cơ bản về server database :

 Control panel  giao diện web ArangoDB

Ở trung tâm của chuyển trên cùng, bạn sẽ thấy DB: _system . Điều này cho biết database hiện được chọn. Mặc định là database _system . Một số tác vụ quản trị chỉ có thể được thực hiện trong database _system .

Đối với các phần tiếp theo, ta sẽ tạo một database để làm việc. Di chuột qua mục menu DB: _system và nhấp vào liên kết Quản lý DB .

Trên trang sau, nhấp vào nút Thêm database . Điền vào biểu mẫu để tạo database có tên music_library . Bạn phải nhập tên user và password giống như trước đây trong hộp thoại này, nếu không bạn sẽ không thể truy cập database mới sau này:

Tạo một DB mới trong giao diện web

Bây giờ ta đã bắt đầu thực sự làm điều gì đó với ArangoDB.

Bước 6 - Thực hiện các thao tác CRUD với arangosh

Bây giờ ta sẽ rời khỏi giao diện web và quay lại giao diện dòng lệnh arangosh để bao gồm các thao tác CRUD cơ bản trong ArangoDB. Ở phần sau, ta sẽ trình bày lại các thao tác tương tự trong giao diện web, nhưng thực hiện nó trong shell sẽ giúp ta hiểu rõ hơn về cách mọi thứ hoạt động.

Để làm theo, hãy quay lại dòng lệnh cho server của bạn. Kết nối với database music_library mới bằng user và password của bạn:

  • arangosh --server.database music_library --server.username sammy --server.password password

Tạo bộ sưu tập tài liệu

Nếu bạn đến từ nền database quan hệ, Bộ sưu tập là ArangoDB tương đương với một bảng trong database SQL. Ta sẽ tạo một bộ sưu tập để lưu trữ các bài hát trong thư viện nhạc của ta :

  • db._createDocumentCollection('songs')

ArangoDB cung cấp một loạt các phương pháp để quản lý Bộ sưu tập . Hầu hết chúng không được quan tâm vào thời điểm này, nhưng hãy xem chúng khi bạn tiến sâu hơn vào ArangoDB. Hiện tại, ta sẽ tập trung vào các hoạt động CRUD (tạo, đọc, cập nhật và xóa) - nghĩa là cách lấy dữ liệu thực tế vào và ra khỏi database .

Tạo tài liệu

Nơi bạn có các hàng trong database dựa trên SQL, ArangoDB có Tài liệu . Các tài liệu trong ArangoDB là các đối tượng JSON. Mỗi tài liệu được liên kết với một bộ sưu tập và có ba thuộc tính cốt lõi: _id , _rev_key .

Một tài liệu được xác định duy nhất bên trong database bằng cách xử lý tài liệu của nó bao gồm tên bộ sưu tập và khóa _key , được phân tách bằng dấu / . _id lý tài liệu được lưu trữ trong trường _id của tài liệu. Cả _key_id đều tương tự như khóa chính trong database quan hệ.

Lưu ý: Nếu bạn không tự chỉ định điều gì đó, ArangoDB sẽ tạo _key cho mỗi tài liệu. Bạn có thể chỉ định _key tùy chỉnh nếu muốn, nhưng bạn cần đảm bảo nó là duy nhất. Trong suốt hướng dẫn này, ta sẽ đặt _key một cách rõ ràng để giúp copy paste các ví dụ dễ dàng hơn.

Hãy thêm tài liệu đầu tiên của ta vào bộ sưu tập songs :

  • db.songs.save(
  • { title: "Immigrant Song", album: "Led Zeppelin III", artist: "Led Zeppelin", year: 1970, length: 143, _key: "immigrant_song" }
  • )
Output
{ "error" : false, "_id" : "songs/immigrant_song", "_rev" : "11295857653", "_key" : "immigrant_song" }

Đối tượng db giữ tất cả các bộ sưu tập dưới dạng thuộc tính. Mỗi bộ sưu tập cung cấp các chức năng để tương tác với các tài liệu trong bộ sưu tập đó. Hàm save nhận bất kỳ đối tượng JSON nào và lưu trữ nó dưới dạng tài liệu trong bộ sưu tập, trả về các thuộc tính cốt lõi đã nói ở trên và liệu đã xảy ra lỗi hay chưa. Trả về từ mỗi hoạt động lại là một đối tượng JSON.

Để có thứ gì đó để chơi, ta cần thêm một số tài liệu. Chỉ cần copy paste đoạn mã tiếp theo để thêm một số mục nhập khác vào database :

  • db.songs.save(
  • {album: "Led Zeppelin III", title: "Friends", artist: "Led Zeppelin", year: 1970, length: 235, _key: "friends"}
  • );
  • db.songs.save(
  • {album: "Led Zeppelin III", title: "Celebration Day", artist: "Led Zeppelin", year: 1970, length: 209, _key: "celebration_day"}
  • );
  • db.songs.save(
  • {album: "Led Zeppelin III", title: "Since I've Been Loving You", artist: "Led Zeppelin", year: 1970, length: 445, _key: "since_i_ve_been_loving_you"}
  • );
  • db.songs.save(
  • {album: "Led Zeppelin III", title: "Out On the Tiles", artist: "Led Zeppelin", year: 1970, length: 244, _key: "out_on_the_tiles"}
  • );
  • db.songs.save(
  • {album: "Led Zeppelin III", title: "Gallows Pole", artist: "Led Zeppelin", year: 1970, length: 298, _key: "gallows_pole"}
  • );
  • db.songs.save(
  • {album: "Led Zeppelin III", title: "Tangerine", artist: "Led Zeppelin", year: 1970, length: 192, _key: "tangerine"}
  • );
  • db.songs.save(
  • {album: "Led Zeppelin III", title: "That's the Way", artist: "Led Zeppelin", year: 1970, length: 338, _key: "that_s_the_way"}
  • );
  • db.songs.save(
  • {album: "Led Zeppelin III", title: "Bron-Y-Aur Stomp", artist: "Led Zeppelin", year: 1970, length: 260, _key: "bron_y_aur_stomp"}
  • );
  • db.songs.save(
  • {album: "Led Zeppelin III", title: "Hats Off to (Roy) Harper", artist: "Led Zeppelin", year: 1970, length: 221, _key: "hats_off_to_roy_harper"}
  • );

Đọc tài liệu

Để truy xuất tài liệu, bạn có thể sử dụng tay cầm tài liệu hoặc phím _key . Chỉ cần sử dụng tay cầm tài liệu nếu bạn không duyệt qua chính bộ sưu tập. Có một bộ sưu tập, bạn có thể sử dụng chức năng document :

  • db.songs.document('immigrant_song');
Output
{ "year" : 1970, "length" : 143, "title" : "Immigrant Song", "album" : "Led Zeppelin III", "artist" : "Led Zeppelin", "_id" : "songs/immigrant_song", "_rev" : "11295857653", "_key" : "immigrant_song" }

Bây giờ ta có thể tạo và đọc tài liệu, ta sẽ xem xét cách thay đổi chúng:

Cập nhật tài liệu

Khi cập nhật dữ liệu của bạn , bạn có hai tùy chọn: replaceupdate .

Hàm replace sẽ thay thế toàn bộ tài liệu bằng một tài liệu mới, ngay cả khi bạn cung cấp các thuộc tính hoàn toàn khác.

Mặt khác, chức năng update sẽ chỉ vá một tài liệu bằng cách hợp nhất nó với các thuộc tính đã cho. Trước tiên, hãy thử một update ít phá hoại hơn, nơi ta cập nhật genre của một trong những bài hát của ta :

  • db.songs.update("songs/immigrant_song",
  • { genre: "Hard Rock" }
  • );

Hãy cùng xem bài hát mới được cập nhật:

  • db.songs.document("songs/immigrant_song");
Output
{ "year" : 1970, "length" : 143, "title" : "Immigrant Song", "album" : "Led Zeppelin III", "artist" : "Led Zeppelin", "genre" : "Hard Rock", "_id" : "songs/immigrant_song", "_rev" : "11421424629", "_key" : "immigrant_song" }

Chức năng update đặc biệt hữu ích khi bạn có một tài liệu lớn và chỉ cần cập nhật một tập con nhỏ các thuộc tính của nó.

Ngược lại, việc sử dụng cùng một JSON với chức năng replace sẽ phá hủy dữ liệu .

  • db.songs.replace("songs/immigrant_song",
  • { genre: "Hard Rock" }
  • );

Xem bài hát cập nhật ngay bây giờ:

  • db.songs.document("songs/immigrant_song")

Như bạn thấy , dữ liệu root đã bị xóa khỏi tài liệu:

Output
{ "genre" : "Hard Rock", "_id" : "songs/immigrant_song", "_rev" : "11495939061", "_key" : "immigrant_song" }

Xóa tài liệu

Để xóa tài liệu khỏi bộ sưu tập, hãy gọi hàm remove bằng tay cầm tài liệu:

  • db.songs.remove("songs/immigrant_song")

Mặc dù arangosh shell là một công cụ tuyệt vời, nhưng nó lại cồng kềnh để khám phá các tính năng khác của ArangoDB. Tiếp theo, ta sẽ xem xét giao diện web được tích hợp sẵn để tìm hiểu sâu hơn về khả năng của nó.

Bước 7 - Thực hiện các thao tác CRUD với giao diện web

Ta đã xem cách xử lý tài liệu trên arangosh và bây giờ ta quay lại giao diện web. Truy cập http:// your_server_ip :8529/_db/music_library trong trình duyệt của bạn.

Tạo bộ sưu tập tài liệu

Nhấp vào tab Bộ sưu tập trong thanh chuyển trên cùng.

Bạn có thể xem bộ sưu tập songs hiện có mà ta đã thêm từ dòng lệnh; hãy nhấp vào nó và xem các mục nhập, nếu bạn thích.

Từ trang Bộ sưu tập chính, nhấp vào nút Thêm Bộ sưu tập .

Thêm Bộ sưu tập trong Giao diện Web

Vì ta đã có songs , ta sẽ thêm một bộ sưu tập albums . Nhập albums làm Tên trong hộp thoại Bộ sưu tập mới bật lên. Loại mặc định, Tài liệu , là tốt.

Nhấp vào Lưu và bây giờ bạn sẽ thấy hai bộ sưu tập trên trang.

Nhấp vào bộ sưu tập albums . Bạn được giới thiệu với một bộ sưu tập trống:

Xem bộ sưu tập

Tạo tài liệu

Nhấp vào dấu + ở góc trên bên phải để thêm tài liệu. Trước tiên, bạn cần một _key . Nhập led_zeppelin_III làm khóa.

Tiếp theo, có một biểu mẫu nơi bạn có thể chỉnh sửa nội dung của tài liệu. Có một cách đồ họa để thêm thuộc tính được gọi là Cây , nhưng hiện tại, hãy chuyển sang chế độ xem bằng cách chọn nó từ menu thả xuống Cây :

Tạo tài liệu

Vui lòng copy paste JSON sau vào vùng soạn thảo (đảm bảo bạn chỉ sử dụng một bộ dấu ngoặc nhọn):

{ "name": "Led Zeppelin III", "release_date": "1970-10-05", "producer": "Jimmy Page", "label": "Atlantic", "length": 2584 } 

Lưu ý cần phải trích dẫn các phím trong chế độ này. Sau khi hoàn tất, nhấn nút Lưu . Trang sẽ nhấp nháy màu xanh lục trong giây lát để cho biết đã lưu thành công.

Đọc tài liệu

Bạn cần chuyển trở lại trang Bộ sưu tập theo cách thủ công sau khi lưu tài liệu mới.

Nếu bạn nhấp vào bộ sưu tập albums , bạn sẽ thấy mục mới.

Cập nhật tài liệu

Để chỉnh sửa nội dung của tài liệu, chỉ cần nhấp vào hàng bạn muốn chỉnh sửa trong tổng quan tài liệu. Bạn sẽ thấy với trình soạn thảo giống như khi tạo tài liệu mới.

Xóa tài liệu

Xóa tài liệu đơn giản bằng cách nhấn vào biểu tượng - ở cuối mỗi hàng tài liệu. Xác nhận việc xóa khi được yêu cầu .

Ngoài ra, trang tổng quan về Bộ sưu tập cho một bộ sưu tập cụ thể cho phép bạn xuất và nhập dữ liệu, quản lý index và lọc tài liệu.

Như đã đề cập trước đây, giao diện web có rất nhiều thứ để cung cấp. Việc bao gồm mọi tính năng nằm ngoài hướng dẫn này, vì vậy bạn được mời tự mình khám phá các tính năng khác. Ta sẽ đi sâu vào một tính năng khác trong hướng dẫn này: Editor AQL.

Bước 8 - Truy vấn dữ liệu bằng AQL

Như đã đề cập trong phần giới thiệu, ArangoDB đi kèm với một ngôn ngữ truy vấn chính thức được gọi là AQL.

Để tương tác với AQL trong giao diện web, hãy nhấp vào tab AQL Editor trong chuyển trên cùng. Bạn sẽ thấy một trình soạn thảo trống.

Để chuyển đổi giữa editor và chế độ xem kết quả, hãy sử dụng tab Truy vấnKết quả ở góc trên bên phải:

Trình biên tập AQL

Editor có chức năng tô sáng cú pháp, hoàn tác / làm lại và lưu truy vấn. Phần sau đây sẽ tìm hiểu một số tính năng của AQL. Để tham khảo đầy đủ, hãy truy cập tài liệu toàn diện .

Kiến thức cơ bản về AQL

AQL là một ngôn ngữ khai báo, nghĩa là một truy vấn thể hiện kết quả cần đạt được chứ không phải cách đạt được. Nó cho phép truy vấn dữ liệu mà còn sửa đổi dữ liệu. Cả hai cách tiếp cận có thể được kết hợp để đạt được các nhiệm vụ phức tạp.

Việc đọc và sửa đổi các truy vấn trong AQL hoàn toàn tuân theo ACID. Các hoạt động sẽ kết thúc toàn bộ hoặc hoàn toàn không. Ngay cả việc đọc dữ liệu cũng sẽ diễn ra trên một ảnh chụp nhanh dữ liệu nhất quán.

Ta bắt đầu lại với việc tạo dữ liệu. Hãy thêm nhiều bài hát hơn vào bộ sưu tập songs của ta . Chỉ cần copy paste truy vấn sau:

FOR song IN [  { album: "Led Zeppelin", title: "Good Times Bad Times", artist: "Led Zeppelin", length: 166, year: 1969, _key: "good_times_bad_times" }  ,  { album: "Led Zeppelin", title: "Dazed and Confused", artist: "Led Zeppelin", length: 388, year: 1969, _key: "dazed_and_confused" }  ,  { album: "Led Zeppelin", title: "Communication Breakdown", artist: "Led Zeppelin", length: 150, year: 1969, _key: "communication_breakdown" }  ]  INSERT song IN songs 

Nhấp vào nút Gửi .

Truy vấn này đã là một ví dụ điển hình về cách hoạt động của AQL: Bạn lặp lại danh sách tài liệu với FOR và thực hiện thao tác trên từng tài liệu. Danh sách có thể là một mảng với các đối tượng JSON hoặc bất kỳ tập hợp nào trong database của bạn. Các thao tác bao gồm lọc, sửa đổi, chọn thêm tài liệu, tạo cấu trúc mới hoặc (như trong ví dụ này) chèn tài liệu vào database . Trên thực tế, AQL cũng hỗ trợ tất cả các hoạt động CRUD.

Để xem tổng quan về tất cả các bài hát trong database , hãy chạy truy vấn sau. Nó tương đương với SELECT * FROM songs trong database dựa trên SQL (vì editor ghi nhớ truy vấn cuối cùng, bạn nên nhấp vào biểu tượng thùng rác để xóa editor ):

FOR song IN songs RETURN song 

Đến đây bạn sẽ thấy tất cả các mục từ database bài hát trong trường văn bản. Quay lại tab Truy vấn và xóa lại editor .

Một ví dụ khác liên quan đến việc lọc cơ bản cho các bài hát trên thời gian phát 3 phút:

FOR song IN songs  FILTER song.length > 180  RETURN song 

Kết quả được trình bày trong tab Kết quả của editor :

Kết quả truy vấn

Ví dụ AQL phức tạp

AQL đi kèm với một tập hợp các chức năng cho tất cả các loại dữ liệu được hỗ trợ và thậm chí cho phép bổ sung các chức năng mới . Kết hợp với khả năng gán các biến trong một truy vấn, bạn có thể xây dựng các cấu trúc rất phức tạp. Điều này cho phép bạn di chuyển các hoạt động sử dụng nhiều dữ liệu đến gần chính dữ liệu hơn là thực thi chúng trên client . Để minh họa điều này, ta sẽ định dạng thời lượng của bài hát là mm:ss để làm cho nó dễ đọc cho user :

FOR song IN songs  FILTER song.length > 180  LET minutes = FLOOR(song.length / 60)  LET seconds = song.length % 60  RETURN  { title: song.title, duration: CONCAT_SEPARATOR(':', minutes, seconds) } 

Lần này ta sẽ chỉ trả lại tên bài hát cùng với thời lượng. RETURN cho phép bạn tạo một đối tượng JSON mới để trả về cho mỗi tài liệu đầu vào.

AQL là ngôn ngữ phức tạp với rất nhiều tính năng. Nhưng có một tính năng đáng nói hơn, đặc biệt là trong bối cảnh của database NoSQL: Tham gia.

Tham gia AQL

Sử dụng kho tài liệu làm database của bạn có một số tác động. Bạn nên lập mô hình dữ liệu của bạn theo một cách khác với cách bạn làm khi sử dụng database quan hệ.

Trong repository tài liệu, bạn có khả năng nhúng dữ liệu mà nếu không sẽ được mô hình hóa dưới dạng một quan hệ, nhưng cách tiếp cận này không phải lúc nào cũng khả thi. Có những trường hợp khi một mối quan hệ có ý nghĩa hơn nhiều. Nếu không có khả năng cho phép database thực hiện các phép nối bắt buộc, bạn sẽ kết hợp dữ liệu trên client hoặc không chuẩn hóa mô hình dữ liệu và nhúng các tài liệu con. Điều này trở nên đặc biệt khó khăn đối với các tập dữ liệu lớn và phức tạp.

Vì vậy, ta hãy tham gia.

Để minh họa tính năng này, ta sẽ thay thế thuộc tính album của các bài hát bằng một tham chiếu đến bộ sưu tập albums . Ta đã tạo album Led Zeppelin III làm tài liệu trước đó. Vui lòng quay lại và thêm lại album nếu bạn đã xóa nó trong ví dụ trước đó.

Truy vấn này sẽ giải quyết vấn đề:

FOR album IN albums  FOR song IN songs  FILTER song.album == album.name  LET song_with_album_ref = MERGE(UNSET(song, 'album'),  { album_key: album._key }  )  REPLACE song WITH song_with_album_ref IN songs 

Trước tiên, ta lặp lại tất cả các album và sau đó tìm kiếm tất cả các bài hát có liên quan đến album này. Bước tiếp theo là tạo ra một tài liệu mới, trong đó có các album_key thuộc tính và UNSET các album thuộc tính. Ta sẽ sử dụng REPLACE chứ không phải UPDATE để cập nhật tài liệu bài hát. Điều này có thể thực hiện được vì ta đã tạo một tài liệu bài hát mới trước đó.

Sau lần di chuyển dữ liệu này, giờ đây ta có thể duy trì tài liệu album ở một nơi. Khi tìm nạp dữ liệu bài hát, ta có thể sử dụng phép nối để thêm lại tên album vào tài liệu bài hát:

FOR song IN songs  FOR album IN albums  FILTER album._key == song.album_key  RETURN MERGE(song,  { album: album.name }  ) 

Ta hầu như chưa quét sạch bề mặt của những gì có thể đạt được với AQL, nhưng bạn sẽ có ấn tượng tốt về những gì có thể. Để có tài liệu tham khảo đầy đủ về ngôn ngữ và nhiều ví dụ hơn, hãy tham khảo tài liệu mở rộng.

(Tùy chọn) Bước 9 - Tạo bản backup

Bạn nên bắt đầu nghĩ đến việc backup sau khi đưa database ArangoDB vào production . Tuy nhiên, đó là một thực tiễn tốt để cài đặt các bản backup trước đó.

Sử dụng tính năng Backup từ DigitalOcean là một khởi đầu tốt. Ngoài ra, bạn có thể cần xem xét việc sử dụng arangodumparangorestore để kiểm soát chi tiết hơn về những gì cần backup và nơi lưu trữ các bản backup .

(Tùy chọn) Bước 10 - Nâng cấp

Khi một version mới của ArangoDB được phát hành, nó sẽ được xuất bản thông qua repository đã cấu hình . Để cài đặt version mới nhất, trước tiên bạn cần cập nhật index repository :

  • sudo apt-get update

Bây giờ dừng database :

  • sudo service arangodb stop

Cập nhật nó lên version mới nhất:

  • sudo apt-get install arangodb

Lưu ý: Sau khi cài đặt bản cập nhật, hệ thống sẽ cố gắng khởi động dịch vụ arangodb . Điều này có thể không thành công vì các file database cần được nâng cấp. Điều này là để được mong đợi.

Bạn có thể cần phải tự nâng cấp các file database :

  • sudo service arangodb upgrade

Sau đó, khởi động server như bình thường:

  • sudo service arangodb start

Mở rộng ArangoDB với các ứng dụng Foxx

Trước khi kết thúc, còn một điều đáng nói nữa: Vì ArangoDB có một công cụ V8 tích hợp để xử lý tất cả JavaScript và nó có một server HTTP được tích hợp sẵn, ta có thể mở rộng API HTTP hiện có với các điểm cuối tùy chỉnh. Chức năng này được gọi là Foxx .

Foxx là một khuôn khổ sử dụng ArangoDB để xây dựng các dịch vụ nhỏ tùy chỉnh với dữ liệu liên tục. Ứng dụng Foxx được viết bằng JavaScript và chạy trong ngữ cảnh V8 của ArangoDB. Ứng dụng có quyền truy cập trực tiếp vào giao diện JavaScript root và do đó có thể truy cập dữ liệu mà không cần bất kỳ chuyến đi vòng HTTP nào. Foxx cung cấp một khung công tác tối thiểu theo nghĩa Sinatra cho Ruby hoặc Flask cho Python. Bạn viết bộ điều khiển để xử lý các yêu cầu đến và thực hiện logic nghiệp vụ bên trong các mô hình.

Ứng dụng Foxx có thể được quản lý thông qua giao diện web và có thể được phát triển giống như bất kỳ ứng dụng nào khác. Bạn có thể đặt chúng dưới quyền kiểm soát version và thậm chí triển khai chúng trực tiếp từ repository Git. Vì chúng chỉ là JavaScript nên việc kiểm tra đơn vị chúng rất đơn giản. Đối với các trường hợp sử dụng đơn giản, chúng giống như các thủ tục được lưu trữ trong hệ thống database quan hệ, nhưng mã Foxx dễ bảo trì và kiểm tra hơn nhiều.

Sử dụng các ứng dụng Foxx như các thủ tục được lưu trữ chỉ là bước khởi đầu. Hãy tưởng tượng bạn có nhiều ứng dụng chia sẻ logic kinh doanh nhất định. Với Foxx, bạn có thể di chuyển logic nghiệp vụ này đến gần dữ liệu hơn để xử lý nhanh hơn và giảm độ phức tạp của việc phân phối triển khai được chia sẻ giữa các thành phần. Việc chạy ArangoDB dưới dạng một cụm thậm chí còn đảm bảo cung cấp các ứng dụng Foxx cho mỗi thành viên trong group .

Thậm chí toàn bộ ứng dụng web đều có thể thực hiện được với Foxx. Sử dụng các khuôn khổ giao diện user như Angular hoặc Ember cho phép bạn chạy các ứng dụng hoàn toàn ngoài database . Không cần cơ sở hạ tầng bổ sung cho việc này. Trong môi trường production , cuối cùng bạn sẽ đặt Nginx hoặc tương tự trước ArangoDB. ArangoDB đi kèm với một số ứng dụng Foxx cung cấp chức năng phổ biến, chẳng hạn như xác thực và lưu trữ phiên. Bạn thậm chí có thể sử dụng các gói npm nếu chúng không dựa vào chức năng HTTP.

Để được giới thiệu tốt về Foxx, hãy tham khảo sách dạy nấu ăn này.

Kết luận

ArangoDB là một database mạnh mẽ với một loạt các trường hợp sử dụng được hỗ trợ. Nó được duy trì tốt và có tài liệu rất tốt. Bắt đầu với nó rất dễ dàng vì có các gói cho mọi hệ điều hành chính. Giao diện web giảm bớt gánh nặng khám phá các tính năng và nếu bạn xuất thân từ nền tảng quan hệ, thì việc sử dụng AQL không khác với sử dụng SQL.

Có tùy chọn mở rộng database với các ứng dụng JavaScript và các tính năng đồ thị, biến ArangoDB thành một gói hoàn chỉnh để bắt đầu và phát triển ứng dụng.

Lúc này, ta đã chia sẻ bức tranh lớn về ArangoDB.

Trong các bước tiếp theo, ta đề xuất những điều sau:

  • Đối với bất kỳ ứng dụng thực nào, bạn sẽ tương tác với API HTTP. Ta không đề cập đến nó ở đây, vì rất có thể bạn sẽ không sử dụng nó trực tiếp mà thông qua một trong nhiều trình điều khiển ngôn ngữ mẹ đẻ .

  • Tương tác với dữ liệu trong ArangoDB được thực hiện thông qua AQL hầu hết thời gian. Làm quen với nó là điều bắt buộc nếu bạn muốn sử dụng ArangoDB trong môi trường production .

  • ArangoDB không chỉ là một repository tài liệu mà còn có các tính năng đồ thị rất mạnh mẽ. Nó cho phép bạn lập mô hình dữ liệu của bạn dưới dạng các đỉnh trong một biểu đồ có hướng. Các quan hệ có thể được mô hình hóa dưới dạng các cạnh giữa các đỉnh đó thay vì sử dụng các tham chiếu _key . Mô hình hóa dữ liệu theo cách này có thể có những lợi ích so với cách tiếp cận quan hệ được sử dụng trong database SQL.


Tags:

Các tin liên quan

Cách cài đặt Lita Chat Bot cho IRC trên Ubuntu 14.04
2015-06-10
Cách cài đặt và cấu hình Ansible trên Ubuntu 14.04
2015-06-05
Triển khai ứng dụng Rails trên Ubuntu 14.04 với Capistrano, Nginx và Puma
2015-06-03
Cách xây dựng các SPA (Ứng dụng một trang) bằng NodeJS, SailsJS và DustJS trong Ubuntu 14.04
2015-05-27
Cách thiết lập môi trường puppet masterless trên Ubuntu 14.04
2015-04-29
Cách backup server Ubuntu 14.04 bằng Bacula
2015-04-17
Cách cài đặt WordPress với OpenLiteSpeed trên Ubuntu 14.04
2015-04-16
Cách triển khai Wordpress với Shipyard trên Ubuntu 14.04
2015-04-14
Cách quản lý Jenkins với Rancher trên Ubuntu 14.04
2015-03-25
Cách cài đặt Sandstorm trên Ubuntu 14.04
2015-03-19