2009-04-01 44 views
7

Tôi quen thuộc với CouchDB và ý tưởng lập bản đồ kết quả của nó cho các đối tượng Scala, cũng như tìm một số cách tự nhiên để lặp lại với nó, đến ngay lập tức.CouchDB có phù hợp nhất với ngôn ngữ động không?

Nhưng tôi thấy rằng các ngôn ngữ động như Ruby và Javascript làm mọi việc rất tốt với chương trình trợ giúp json/document-centric/shchema của CouchDB.

Bất kỳ sản phẩm tốt nào để làm việc với Couch bằng ngôn ngữ tĩnh?

+0

Bạn có thể thấy câu hỏi này là: Ngôn ngữ động có phù hợp nhất với CouchDB không? – paulosuzart

Trả lời

17

Tôi hiểu rằng CouchDB hoạt động hoàn toàn với các đối tượng JSON. Vì JSON không được nhập sai, nên bạn có thể tin rằng nó hoàn toàn phù hợp hơn với các ngôn ngữ động. Tuy nhiên, XML thường không được phân loại, và Scala có hỗ trợ thư viện rất tốt để tạo và thao tác XML. Để khám phá các tính năng XML của Scala, hãy xem: http://www.ibm.com/developerworks/library/x-scalaxml/

Tương tự như vậy với JSON. Với sự hỗ trợ thích hợp của thư viện, việc xử lý JSON có thể cảm thấy tự nhiên ngay cả trong các ngôn ngữ tĩnh. Đối với một cách tiếp cận để xử lý dữ liệu JSON trong Scala, hãy xem bài viết này: http://technically.us/code/x/weaving-tweed-with-scala-and-json/

Với cơ sở dữ liệu đối tượng nói chung, việc thuận tiện để xác định "mô hình" (sử dụng, một lớp bằng ngôn ngữ) và sử dụng JSON hoặc XML hoặc một số ngôn ngữ tài liệu không được phân loại khác là một biểu diễn được tuần tự hóa của lớp. Hỗ trợ thư viện thích hợp sau đó có thể dịch giữa biểu mẫu được tuần tự hóa (như JSON) và cấu trúc dữ liệu trong bộ nhớ, với kiểu gõ tĩnh và tất cả các tính năng tốt đi kèm với nó. Đối với một ví dụ về phương pháp này, xem Bản ghi của Lift đã thêm chuyển đổi vào và từ JSON: http://groups.google.com/group/liftweb/msg/63bb390a820d11ba

+0

Cảm ơn Ortiz!Sẽ tốt hơn nếu làm với JSON những gì chúng ta có thể với XML trong Scala, đúng không? – paulosuzart

+1

Vâng. Tôi nghĩ rằng thư viện của n8han (liên kết ở trên) là một khởi đầu tuyệt vời, nhưng nhiều thứ hơn có thể được thực hiện để hỗ trợ thư viện JSON tốt hơn ở Scala. –

3

Tôi tự hỏi bạn có hỏi đúng câu hỏi không. Tại sao bạn sử dụng Scala chứ không phải ngôn ngữ động? Có lẽ vì một số điều tốt đẹp mà Scala cung cấp cho bạn điều đó quan trọng đối với bạn và, tôi cho rằng, chất lượng mã của bạn. Vậy tại sao bạn không sử dụng cơ sở dữ liệu "được nhập tĩnh" (tức là dựa trên lược đồ)? Một lần nữa tôi chỉ giả định, nhưng khả năng đáp ứng với sự thay đổi đến với tâm trí. Cơ sở dữ liệu SQL sản xuất có xu hướng khủng khiếp là rất khó thay đổi và tái cấu trúc.

Vì vậy, dữ liệu của bạn bị nhập sai và mã của bạn được nhập mạnh mẽ. Nhưng một nơi nào đó bạn sẽ cần phải thực hiện quá trình chuyển đổi. Điều này có nghĩa là ở đâu đó, bạn sẽ có một "lược đồ" cho dữ liệu của bạn ngay cả khi cơ sở dữ liệu không có. Lược đồ này được định nghĩa bởi các lớp bạn đang ánh xạ các tài liệu Couch lên. Điều này làm cho cảm giác hoàn hảo; hầu hết việc sử dụng Couch mà tôi đã thấy có một khóa như "loại" và cho mỗi loại ít nhất một số bộ khóa phổ biến. Có thể ánh xạ bản đồ JSON tới các lớp Scala này hoặc sử dụng ví dụ: các công cụ phản chiếu lạ mắt (chậm hơn nhưng khá đẹp), hoặc một số tính năng nổi bật của Scala mà tôi chưa quen thuộc là một chi tiết. Bắt đầu với một cách dễ dàng nhưng chậm, sau đó xem nếu nó đủ nhanh.

Điều lớn xảy ra khi các lớp học của bạn, tức là lược đồ của bạn, thay đổi. Thay vì ALTER'ing các bảng của bạn, bạn có thể thay đổi lớp, đảm bảo rằng bạn làm điều gì đó thông minh nếu một số tài liệu mà bạn mong đợi bị thiếu (vì nó được dựa trên phiên bản cũ của lớp), và bạn tắt đi. Phản hồi thay đổi chưa bao giờ dễ dàng hơn thế, và mã của bạn vẫn được đánh máy tĩnh như nó có thể nhận được.

Nếu điều này không đủ tốt cho bạn, và bạn không muốn có sơ đồ nào, thì bạn có hiệu quả nói rằng bạn không muốn sử dụng các lớp để xác định và thao tác dữ liệu của bạn. Đó là tốt quá (mặc dù tôi không thể tưởng tượng một sử dụng), nhưng sau đó câu hỏi không phải là về năng động vs ngôn ngữ tĩnh, nhưng về việc liệu sử dụng các ngôn ngữ OO dựa trên lớp học ở tất cả.

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