2016-03-13 16 views
5

Đến từ năm sử dụng cơ sở dữ liệu quan hệ, tôi đang cố gắng để phát triển một ứng dụng trò chuyện/tin nhắn khá cơ bản sử dụng căn cứ hỏa lựcCấu trúc cơ sở dữ liệu NoSQL cho một ứng dụng chat (sử dụng căn cứ hỏa lực)

căn cứ hỏa lực sử dụng một NoSQL cấu trúc dữ liệu phương pháp sử dụng JSON chuỗi định dạng.

Tôi đã làm rất nhiều nghiên cứu để hiểu cách cấu trúc cơ sở dữ liệu với hiệu suất trong đầu. Tôi đã cố gắng "không chuẩn hóa" cấu trúc và kết thúc với những điều sau:

{ 

"chats" : { 

    "1" : { 
     "10" : { 
      "conversationId" : "x123332" 
     }, 
     "17": { 
      "conversationId" : "x124442" 
     } 
    } 
}, 

"conversations" : { 

    "x123332" : { 

     "message1" : { 

     "time" : 12344556, 
     "text" : "hello, how are you?", 
     "userId" : 10 
     }, 
     "message2" : { 

     "time" : 12344560, 
     "text" : "Good", 
     "userId" : 1 
     } 
    } 
    } 
} 

Số 1, 10, 17 là id người dùng mẫu.

Câu hỏi của tôi là, điều này có thể được cấu trúc theo cách tốt hơn không? Mục tiêu là mở rộng quy mô khi người dùng ứng dụng phát triển và vẫn có được hiệu suất tốt nhất có thể.

+1

Cấu trúc dữ liệu Firebase phụ thuộc vào những gì bạn muốn thực hiện với dữ liệu. Những gì được trình bày là rất mở rộng, query'able và các nút được quan sát cho những thay đổi. Ngoài ra, Firebase nhanh chóng phồng rộp và có thể dễ dàng xử lý hàng nghìn yêu cầu. Tuy nhiên, nếu không hiểu phạm vi đầy đủ hoặc một câu hỏi cụ thể về dữ liệu thì đó là câu hỏi mở. Ví dụ; chức năng của nút trò chuyện là gì? Nút cuộc hội thoại chứa mọi thứ cần thiết để theo dõi cuộc trò chuyện với người dùng khác. ví dụ. Người dùng đăng nhập, truy vấn tất cả các cuộc hội thoại chứa id người dùng của họ và sau đó quan sát họ. – Jay

+0

Hãy suy nghĩ về nó như một ứng dụng WhatsApp cơ bản, nơi bạn có một hoạt động hiển thị tất cả các cuộc trò chuyện của tôi. Khi tôi bấm vào một cuộc trò chuyện tôi nhận được "xem chi tiết" đó là thông điệp cuộc trò chuyện giữa hai người dùng. –

+0

Câu hỏi tự giải thích những gì ứng dụng thực hiện nhưng việc sử dụng cấu trúc là mơ hồ; chức năng được mô tả có thể dễ dàng được thực hiện chỉ bằng nút đàm thoại. Việc chuẩn hóa dữ liệu là rất quan trọng nhưng không làm điều đó chỉ vì mục đích tạo ra một nút khác khi nó không cần thiết. Trong trường hợp này, có thể hoặc không cần thiết. Câu hỏi cần phải cụ thể hơn rất nhiều vì vậy tôi sẽ đề xuất tạo một số mã để thử nghiệm và khi bạn gặp sự cố, * sau đó * đăng câu hỏi cụ thể của bạn. – Jay

Trả lời

2

Một trường hợp để lưu trữ các thông điệp có thể trông giống như thế này:

"userMessages": 
    { "simplelogin:1": 
     { "simplelogin:2": 
      { "messageId1": 
       { "uid": "simplelogin:1", 
        "body": "Hello!", 
        "timestamp": Firebase.ServerValue.TIMESTAMP }, 
       "messageId2": { 
        "uid": "simplelogin:2", 
        "body": "Hey!", 
        "timestamp": Firebase.ServerValue.TIMESTAMP } 
       } 
      } 
     } 

Dưới đây là một ví dụ fireslack cấu trúc này đến từ đâu. Hướng dẫn này xây dựng một ứng dụng như slack sử dụng firebase: https://thinkster.io/angularfire-slack-tutorial

Nếu bạn muốn cụ thể hơn, nhiều thông tin hơn sẽ hữu ích.

+0

nhưng nhật ký simplelogin2 là gì, bạn sẽ tìm thấy các tin nhắn trò chuyện cho người dùng này như thế nào? – Ruben

+1

Bạn có thể lưu trữ cùng một thông tin trong 'simplelogin2'. Có, nó sao chép thông tin trong cơ sở dữ liệu, nhưng đó thường là mức giá bạn trả cho thời gian truy vấn nhanh trong NoSQL. –

+0

bạn có nhiều ví dụ hơn không? nó rất kỳ lạ và chống lại trực quan để có everthing hai lần hoặc nhiều hơn trong cơ sở dữ liệu. trên trang web firebase (https://firebase.google.com/docs/database/web/structure-data) có cấu trúc khác cho ứng dụng trò chuyện nhưng tôi không hiểu cách bạn có thể đọc dữ liệu này, có các phím một, hai, ba .. nhưng nếu tôi đăng nhập là 'ghopper', làm cách nào tôi có thể tìm thấy khóa chính xác cho cuộc trò chuyện hiện tại – Ruben

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