2010-05-16 30 views
16

Tôi muốn sử dụng cơ sở dữ liệu biểu đồ bằng cách sử dụng php. Bạn có thể chỉ ra một số tài nguyên về nơi để bắt đầu không? Có bất kỳ mã ví dụ/hướng dẫn nào không? Hoặc có bất kỳ phương pháp lưu trữ dữ liệu nào khác có liên quan đến nhau trong các tình huống hoàn toàn ngẫu nhiên/trừu tượng không?Cơ sở dữ liệu có cấu trúc biểu đồ và Php

-

dụ Rất trừu tượng của các mối quan hệ cần thiết: John liên quan đến Mary, cả hai liên quan đến School, John là Tall, Mary là ngắn, John có Blue Eyes, Mary có Green Eyes, truy vấn tôi muốn là có người có liên quan đến 'người ngắn có Green Eyes và đi đến trường' -> câu trả lời John

-

Một ví dụ khác:

TrackA -> ArtistA 
      -> ArtistB 

      -> AlbumA -----> [ label ] 
      -> AlbumB -----> [ A ] 

      -> TrackA:Remix 
      -> Genre:House 

      -> [ Album ] -----> [ label ] 
    TrackB -> [ C ]  [ B ] 

thi truy vấn ple:

Thể loại nào là TrackB gần hơn? Trả lời: Nhà - vì nó liên quan đến Album C, liên quan đến Bản nhạc C và có liên quan đến Thể loại: Nhà

Nhận tất cả Thể loại: Album liên quan đến nhà của Nhãn A: kết quả: AlbumA, AlbumB - bởi vì cả hai đều có TrackA có liên quan đến thể loại: Nhà

-

có thể trong MySQL nhưng nó sẽ đòi hỏi một tập cố định các thuộc tính/cột cho từng hạng mục và một truy vấn không linh hoạt phức tạp, thay vào đó tôi cần mọi thuộc tính là một mục của chính nó và thay vì 'thuộc' để một cái gì đó, để được 'liên quan' đến một cái gì đó.

+1

Sự khác biệt giữa "thuộc về cái gì đó" có liên quan đến cái gì đó "(ngoài việc sử dụng một từ khác)? –

+0

@ Joel L: Theo tôi nghĩa là thuộc tính mà một mục có và liên quan Với nhau không phải là thuộc tính của người khác, giống như bài hát thuộc về nghệ sĩ nhưng cùng một bản nhạc có thể có nhiều hơn một nghệ sĩ sử dụng phương pháp cha/con bạn sẽ cần phải lặp lại cùng một con (theo dõi) cho mỗi phụ huynh (nghệ sĩ) cộng với Bản nhạc có thể có nhiều hơn một Album và trong nhiều hơn một Nhãn. Bạn sẽ mô tả một mối quan hệ như thế nào mà không cần sử dụng đồ thị? – stagas

Trả lời

8

Có một số công việc đang diễn ra để tạo cơ sở dữ liệu đồ thị Neo4j có sẵn từ PHP, xem this wiki page để biết thêm thông tin! Về cách tạo mô hình miền của bạn dưới dạng biểu đồ, user mailing list có xu hướng khá tuyệt vời.

Cập nhật: hiện tại có getting started blog post ngắn cho ứng dụng REST neo4j PHP.

+0

neo4j REST truy vấn khách hàng khá chậm nếu so sánh với mysql – conandor

1

Nghe có vẻ hơi giống một vấn đề "điển hình" Prolog ... đó là một ngôn ngữ lập trình hoàn toàn khác với PHP. Nhưng có lẽ bạn có thể làm việc với popen. Hoặc bạn định nghĩa một bảng SQL với các cột [id, predicate, atom1, atom2], để lưu trữ sự thật của "Mary có Green Eyes": predicate = "has", atom1 = "Mary", atom2 = "Green Mắt".

Bây giờ bạn có thể tham gia và lọc các vị từ và thuộc tính với SQL bạn chọn.

+0

Tôi nghĩ bạn sẽ cần một hàng cho mọi mối quan hệ có thể là một vài hàng nếu bạn xử lý nhiều dữ liệu như cơ sở dữ liệu âm nhạc hoặc phim với các thẻ và tác giả, nghệ sĩ, thể loại và các mối quan hệ khác? – stagas

+0

Có, nhưng hầu như mọi đồ thị có xu hướng có số mũ ("mối quan hệ") giữa các nút ("nguyên tử"), điều này giải quyết vấn đề đồ thị (đặc biệt nếu phân vùng ngang cũng được sử dụng) sử dụng cơ sở dữ liệu truyền thống khó hơn nhiều. –

1

Nó loại âm thanh như bạn nên tiếp cận nó theo cách này:

1) Mã một đối tượng đồ thị mà sẽ cho phép bạn truy vấn dữ liệu của bạn theo cách bạn muốn.

2) Viết một lớp kiên trì cho đối tượng của bạn

3) tối ưu hóa các cuộc gọi mà làm truy vấn của bạn trong đối tượng đồ thị để sử dụng cơ sở dữ liệu các cuộc gọi khi thích hợp (ví dụ, nếu bạn cần phải bảo vệ bộ nhớ).

+0

Có thể là một giải pháp, tôi đã suy nghĩ nếu có bất kỳ lớp nào đã tồn tại ở đó nhưng có vẻ như cấu trúc đồ thị có rất ít sự chú ý vào lúc này và mã bạn có thể tìm thấy rất ít. Tôi đoán tôi sẽ phải phát minh ra bánh xe ... – stagas

1

Đề xuất của tôi là chọn một biểu đồ DB dựa trên Java như OrientDB hoặc neo4j và sau đó sử dụng nó qua PHP/Java bridge. Trong tương lai gần neo4j (và tại một số điểm OrientDB là tốt) nên nhận được hỗ trợ php bản địa và bạn có thể thay thế cây cầu với quyền truy cập bản địa.

1

cũng có tính đến câu hỏi này là một tuổi, nó vẫn có thể là thú vị để lưu ý rằng bạn có thể làm một truy vấn như vậy với mọi kho dữ liệu rdf hỗ trợ sparql hoặc các ngôn ngữ có thể so sánh được.

0

Bạn cũng có thể tìm thấy một khách hàng Rexster cho php: https://github.com/PommeVerte/rexpro-php

Như thêm thông tin. Rexster có thể tải đồ thị từ nhiều đồ thị khác nhau như Neo4j và OrientDb.

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