2012-07-04 37 views
37

Tôi cần tải 6.6 tỷ bigram vào bộ sưu tập nhưng tôi không thể tìm thấy bất kỳ thông tin nào về cách tốt nhất để thực hiện việc này.MongoDB: Số lượng tài liệu trong bộ sưu tập

Tải nhiều tài liệu đó vào một chỉ mục khóa chính sẽ mất vĩnh viễn nhưng theo như tôi biết, mongo không hỗ trợ tương đương với phân vùng?

Trợ giúp sharding? Tôi có nên thử và chia nhỏ tập dữ liệu trên nhiều bộ sưu tập và xây dựng logic đó vào ứng dụng của tôi không?

+3

Xem nếu câu trả lời này của tôi sẽ giúp bạn: http://stackoverflow.com/ câu hỏi/6783212/how-to-load-100-triệu-bản ghi-thành-mongodb-với-scala-cho-hiệu suất-te sting/6786925 # 6786925 – DhruvPathak

Trả lời

46

Thật khó để nói những gì chèn số lượng lớn tối ưu là - điều này một phần phụ thuộc vào kích thước của các đối tượng bạn đang chèn và các yếu tố không thể đo lường khác. Bạn có thể thử một vài phạm vi và xem điều gì mang đến cho bạn hiệu suất tốt nhất. Thay vào đó, một số người thích sử dụng mongoimport, điều này khá nhanh, nhưng dữ liệu nhập của bạn cần phải là json hoặc csv. Rõ ràng là mongodrestore, nếu dữ liệu ở định dạng BSON.

Mongo có thể dễ dàng xử lý hàng tỷ tài liệu và có thể có hàng tỷ tài liệu trong một bộ sưu tập nhưng hãy nhớ rằng maximum document size is 16mb. Có rất nhiều dân gian với hàng tỷ tài liệu trong MongoDB và có rất nhiều cuộc thảo luận về nó trên MongoDB Google User Group. Dưới đây là một số document về việc sử dụng một số lượng lớn các bộ sưu tập mà bạn có thể muốn đọc, nếu bạn thay đổi ý định và muốn có nhiều bộ sưu tập thay thế. Bạn càng có nhiều bộ sưu tập, bạn càng có nhiều chỉ mục hơn, điều này có thể không phải là thứ bạn muốn.

Đây là một presentation từ Craigslist khi chèn hàng tỷ tài liệu vào MongoDB và của anh chàng blogpost. Nó giống như sharding sẽ là một giải pháp tốt cho bạn nhưng thường sharding được sử dụng để mở rộng trên nhiều máy chủ và rất nhiều dân gian làm điều đó bởi vì họ muốn quy mô viết của họ hoặc họ không thể giữ bộ làm việc của họ (dữ liệu và chỉ mục) trong RAM. Nó là hoàn toàn hợp lý để bắt đầu với một máy chủ duy nhất và sau đó di chuyển đến một mảnh vỡ hoặc bản sao thiết lập như dữ liệu của bạn phát triển hoặc bạn cần dư thừa thêm và khả năng phục hồi.

Tuy nhiên, có những người dùng khác sử dụng nhiều bộ điều khiển mong muốn để vượt qua giới hạn khóa của một chiếc máy bay nhỏ với nhiều lần ghi. Rõ ràng nhưng vẫn đáng nói nhưng một thiết lập đa mongod là phức tạp hơn để quản lý hơn một máy chủ duy nhất. Nếu IO hoặc CPU của bạn không được max ở đây, bộ làm việc của bạn nhỏ hơn RAM và dữ liệu của bạn dễ giữ cân bằng (phân phối khá ngẫu nhiên), bạn sẽ thấy cải tiến (với sharding trên một máy chủ). Là một FYI, có tiềm năng cho bộ nhớ và sự tranh chấp IO. Với 2,2 đã được cải thiện concurrency với db locking, tôi nghi ngờ rằng sẽ có ít hơn nhiều lý do cho việc triển khai như vậy.

Bạn cần lập kế hoạch di chuyển của bạn để sharding đúng cách, nghĩa là suy nghĩ cẩn thận về việc chọn khóa phân đoạn của bạn. Nếu bạn đi theo cách này thì tốt nhất là nên phân chia trước và tắt cân bằng. Nó sẽ phản tác dụng để di chuyển dữ liệu xung quanh để giữ cho mọi thứ cân bằng có nghĩa là bạn sẽ cần phải quyết định lên phía trước làm thế nào để phân chia nó. Ngoài ra, đôi khi điều quan trọng là phải thiết kế tài liệu của bạn với ý tưởng rằng một số trường sẽ hữu ích cho việc kích hoạt hoặc là khóa chính.

Dưới đây là một số liên kết tốt -

+1

Nếu bạn đang lặp qua số lượng dữ liệu lớn hơn như bạn đang đề xuất, nó sẽ chậm trong bất kỳ cơ sở dữ liệu nào, bao gồm các giải pháp cơ sở dữ liệu lớn khác. –

+0

Không @ChrisHoughton, động cơ mysql innodb nhanh chóng đáng kể với chèn/chọn thậm chí> 6,5 tỷ bản ghi, tất nhiên với việc lập chỉ mục tổng hợp và phân vùng. Nhưng khi tôi đã cố gắng mongodb hơn 1 tỷ bản ghi - nó là hết sức đặc biệt với các chức năng tổng hợp. –

7

Bạn hoàn toàn có thể shard data in MongoDB (phân vùng nào trên các máy chủ N trên shard key). Trong thực tế, đó là một trong những thế mạnh cốt lõi của nó. Không cần phải làm điều đó trong ứng dụng của bạn.

Đối với hầu hết các trường hợp sử dụng, tôi thực sự khuyên bạn nên làm điều đó cho 6,6 tỷ tài liệu. Theo kinh nghiệm của tôi, MongoDB hoạt động tốt hơn với một số máy chủ tầm trung thay vì một máy chủ lớn.

+1

Điều này chỉ dành cho một máy chủ duy nhất. Thậm chí nói việc tạo ra 4 mảnh vẫn sẽ giữ hàng tỷ bản ghi trên mỗi phân đoạn ... –

+0

Ít nhất là khi tôi làm việc với khối lượng lớn MongoDB 6 tháng trước, khóa * rất * không tối ưu. Ngay cả khi phân đoạn của bạn nằm trên cùng một máy chủ vật lý, bạn có thể thấy hiệu năng tốt hơn chạy nhiều cá thể MongoDB trên máy chủ (sau đó lại không nghĩ rằng cấu hình đó được hỗ trợ chính thức). Đánh dấu các trường hợp sử dụng của bạn. –

+3

Ngoài ra ... Hiệu suất Mongo rơi khỏi vách đá (tương đối) nếu bạn không có đủ RAM để giữ bộ làm việc (tài liệu thường xuyên truy cập) trong bộ nhớ. Hãy nhận biết điều đó. –

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