2016-02-10 15 views
6

Tôi đang tìm hiểu thêm về ArangoDB và khung công tác Foxx của nó. Nhưng nó không rõ ràng với tôi những gì tôi đạt được bằng cách sử dụng khuôn khổ đó để xây dựng ứng dụng nodejs độc lập của riêng tôi cho API/kiểm soát truy cập, logic, v.v.Việc xây dựng một ứng dụng trong Arango Foxx cung cấp gì ngoài một ứng dụng nút thông thường là

Foxx cung cấp ứng dụng nodejs thông thường nào?

+2

Đối với người kiểm duyệt, đánh dấu điều này để đóng như là ý kiến ​​dựa trên - nó không phải. Tôi không hỏi "cái nào tốt hơn" - tôi hỏi "sự khác biệt" là gì. – Yehosef

+0

Câu hỏi đặt ra là, loại logic nào được đưa vào ứng dụng nodejs, và những gì vào một dịch vụ FOXX. Xem thêm trong thư trả lời đầy đủ sớm. – dothebart

+1

Không - Tôi hỏi nếu có bất kỳ lợi ích nào để có ứng dụng foxx thay vì ứng dụng nodejs độc lập. Phiên bản câu hỏi của bạn dường như giả định có một số lợi thế cho một ứng dụng Foxx và bạn rõ ràng nên có một - chỉ cần những gì logic bạn có thể muốn đặt bên ngoài. Tôi đang đặt câu hỏi rằng giả định - lợi ích gì khi viết ứng dụng Foxx cho tôi? – Yehosef

Trả lời

10

Tiết lộ đầy đủ: Tôi là người bảo trì cốt lõi của ArangoDB và là thành viên của nhóm Foxx.

Tôi khuyên bạn nên xem qua số webinar I gave last year để biết tổng quan chi tiết về sự khác biệt giữa Foxx và Nút và lợi thế của việc sử dụng Foxx khi bạn đang sử dụng ArangoDB. Tôi sẽ cố gắng tóm tắt nhanh ở đây.

Nếu bạn áp dụng những ý tưởng như Trách nhiệm Nguyên tắc đơn đến kiến ​​trúc của bạn, mã server-side của bạn có hai trách nhiệm:

  1. Backend: kiên trì và truy vấn dữ liệu bằng cách sử dụng lưu trữ dữ liệu phụ trợ (ví dụ ArangoDB hoặc cơ sở dữ liệu khác).

  2. Giao diện người dùng: chuyển kết quả truy vấn sang định dạng có thể chấp nhận được cho ứng dụng khách (ví dụ: HTML, JSON, XML, CSV, v.v.).

Trong hầu hết các ứng dụng thông thường, hai trách nhiệm này được hoàn thành bởi cùng một cơ sở mã ứng dụng nguyên khối chạy trong cùng một quy trình.

Tuy nhiên, nhiệm vụ tương tác với lưu trữ dữ liệu thường đòi hỏi phải viết nhiều mã dành riêng cho công nghệ cơ sở dữ liệu. Bạn cần viết các truy vấn (ví dụ: sử dụng SQL, AQL, ReQL hoặc bất kỳ ngôn ngữ cụ thể về công nghệ nào khác) hoặc sử dụng các trình điều khiển dành riêng cho cơ sở dữ liệu.

Ngoài ra trong nhiều ứng dụng không tầm thường, bạn cần phải tương tác với những thứ như thủ tục lưu trữ cũng là một phần của "mã phụ trợ" nhưng sống trong cơ sở dữ liệu. Vì vậy, ngoài việc có máy chủ ứng dụng thực hiện hai tác vụ khác nhau (lưu trữ và kết xuất), một nửa mã cho một trong các tác vụ kết thúc ở một nơi khác, thường sử dụng một ngôn ngữ hoàn toàn khác.

Foxx cho phép bạn giải quyết vấn đề này bằng cách cho phép bạn di chuyển logic mà chúng tôi đã xác định là "phụ trợ" của mã phía máy chủ của bạn vào ArangoDB. Không chỉ bạn có thể ẩn tất cả các ngôn ngữ truy vấn, các cạnh và các bộ sưu tập phía sau API ứng dụng cụ thể hơn, bạn cũng loại bỏ chi phí mạng cần thiết để xử lý các yêu cầu có thể gây ra nhiều hơn một lần cho cơ sở dữ liệu.

Đối với các ứng dụng tầm thường, điều này có nghĩa là bạn có thể loại bỏ hoàn toàn máy chủ Node và truy cập trực tiếp Foxx API của mình từ máy khách. Đối với các tình huống phức tạp hơn, bạn có thể muốn sử dụng Nút để tạo các dịch vụ vi mô bên ngoài mà dịch vụ Foxx của bạn có thể nhấn vào (ví dụ: giao diện với các API không phải HTTP bên ngoài). Hoặc bạn chỉ cần đặt ứng dụng Node thông thường của mình trước ArangoDB và sử dụng Foxx để tạo một API HTTP thể hiện tốt hơn miền vấn đề của ứng dụng của bạn so với API HTTP thô của cơ sở dữ liệu.

Cũng cần lưu ý rằng các dịch vụ cấu trúc Foxx không hoàn toàn khác với các ứng dụng Node. Bạn có thể sử dụng các phụ thuộc NPM và chia mã của bạn thành các mô-đun và tất cả có thể sống trong điều khiển phiên bản và được triển khai từ các gói zip. Nếu bạn không thuyết phục, tôi khuyên bạn nên thử bằng cách thực hiện một số truy vấn thường xuyên nhất của bạn dưới dạng điểm cuối Foxx và sau đó quyết định xem bạn có muốn di chuyển nhiều hơn logic của mình hay không.

+0

Cảm ơn bạn đã phản hồi chi tiết. Tôi đang thử một ứng dụng mẫu và tôi bắt đầu có câu hỏi này. Lợi thế thực sự chính tôi thấy cho đến nay là nó làm giảm chuyến đi khứ hồi từ các ứng dụng đến máy chủ hoặc Nếu tôi muốn bao gồm một ứng dụng đi kèm với cơ sở dữ liệu cho công việc nguyên mẫu. Tôi bắt đầu cảm thấy những nếp nhăn khi tôi nghĩ về việc triển khai bộ nhớ đệm, số liệu hoặc xếp hàng công việc dựa trên việc tạo đối tượng. Tôi sẽ không nghĩ rằng tôi sẽ muốn điều đó bên trong cơ sở dữ liệu của tôi và thông thường tôi sẽ có một cái gì đó bên ngoài cơ sở dữ liệu để xử lý lớp đó. ... – Yehosef

+0

một khi tôi cần phải có một cái gì đó bên ngoài - Tôi đã ít rõ ràng lý do tại sao tất cả các logic không nên sống ở đó .. Nhưng tôi nghe điểm của bạn và có thể thấy giá trị. Tôi sẽ thử và xem nó như thế nào. BTW - cảm ơn công việc của bạn - đó là một DB thực sự ấn tượng. – Yehosef

+0

@Yehosef Foxx có trở lại của bạn trong cả hai tình huống. Đó là vào bạn có bao nhiêu logic bạn di chuyển vào các dịch vụ Foxx của bạn. Bạn chỉ có thể sử dụng Foxx tương đương với các thủ tục lưu sẵn hoặc bạn có thể xây dựng toàn bộ ứng dụng của mình trong Foxx. Đối với hàng đợi công việc vv - về cơ bản nó đi xuống đến nhu cầu hiệu suất của bạn. Tôi xem xét hàng đợi công việc (bên ngoài) chuyên dụng, vv một tối ưu hóa - và trong một số trường hợp, các tối ưu hóa đó có thể không đáng để phát triển/duy trì chi phí. –

Các vấn đề liên quan