2010-03-31 32 views
18

Chúng tôi sử dụng SVN để kiểm soát phiên bản mã nguồn của chúng tôi và đang thử nghiệm sử dụng nó cho các tệp không phải mã nguồn.Hệ thống kiểm soát phiên bản có thể mở rộng (nửa triệu tệp)

Chúng tôi đang làm việc với một tập hợp lớn (300-500k) các tệp văn bản ngắn (1-4kB) sẽ được cập nhật thường xuyên và cần phải kiểm soát phiên bản. Chúng tôi đã thử sử dụng SVN ở chế độ tập tin phẳng và nó đang đấu tranh để xử lý cam kết đầu tiên (500k tệp đã đăng ký) mất khoảng 36 giờ.

Trên cơ sở hàng ngày, chúng tôi cần hệ thống để có thể xử lý 10k tệp đã sửa đổi trên mỗi giao dịch cam kết trong một thời gian ngắn (< 5 phút).

Câu hỏi của tôi:

  1. là SVN giải pháp phù hợp với mục đích của tôi. Tốc độ ban đầu dường như quá chậm để sử dụng thực tế.
  2. Nếu có, có triển khai máy chủ svn cụ thể nào nhanh không? (Chúng tôi đang sử dụng máy chủ svn mặc định gnu/linux và dòng lệnh của khách hàng.)
  3. Nếu Không, f/oss/lựa chọn thay thế thương mại tốt nhất là gì

Cảm ơn


Sửa 1: Tôi cần điều khiển phiên bản vì nhiều người sẽ đồng thời sửa đổi cùng một tệp và sẽ thực hiện các xung đột thủ công/hợp nhất/giải quyết theo cách tương tự như các lập trình viên chỉnh sửa mã nguồn. Vì vậy, tôi cần một kho trung tâm mà mọi người có thể kiểm tra trong công việc của họ và kiểm tra những người khác làm việc. Luồng công việc hầu như giống hệt với quy trình làm việc lập trình ngoại trừ việc người dùng không phải là lập trình viên và nội dung tệp không phải là mã nguồn.


Cập nhật 1: Hóa ra rằng vấn đề chính là chi tiết của một vấn đề hệ thống tập tin hơn là một vấn đề SVN. Đối với SVN, cam kết một thư mục đơn lẻ với một nửa triệu mới tệp không kết thúc ngay cả sau 24 giờ. Chia đều trên 500 thư mục được sắp xếp trong cây 1x5x10x10 với 1000 tệp trên mỗi thư mục dẫn đến thời gian cam kết là 70 phút. Tốc độ cam kết giảm đáng kể theo thời gian cho một thư mục với số lượng tệp lớn. Git có vẻ nhanh hơn rất nhiều. Sẽ cập nhật theo thời gian.

+5

Nếu bạn đang làm những gì tôi nghĩ bạn đang làm, tôi sẽ xem xét một số loại CMS. – erikkallen

+1

Như những người khác đã chỉ ra: nó có thể đáng giải thích những gì bạn đang cố gắng giải quyết nói chung, như một hệ thống kiểm soát phiên bản * có thể * là sai (ít nhất là không hiệu quả nhất) giải pháp cho vấn đề của bạn. – paprika

+0

Hoặc là những gì erikkallen đã nói ở trên hoặc hệ thống tệp có hỗ trợ chụp nhanh được tích hợp sẵn. Thêm chi tiết về vấn đề sẽ là tốt để xác định nếu kiểm soát phiên bản là giải pháp chính xác cho vấn đề. – Juliano

Trả lời

5

là SVN có phù hợp không? Miễn là bạn không kiểm tra hoặc cập nhật toàn bộ kho lưu trữ, thì có.

SVN khá tệ khi thực hiện số lượng tệp rất lớn (đặc biệt là trên Windows) vì tất cả các thư mục .svn đều được ghi để cập nhật khóa khi bạn thao tác trên hệ thống. Nếu bạn có một số lượng nhỏ các thư mục, bạn sẽ không nhận thấy, nhưng thời gian thực hiện dường như tăng theo cấp số nhân.

Tuy nhiên, một khi đã cam kết (theo khối, thư mục theo thư mục có lẽ) thì mọi thứ trở nên nhanh hơn rất nhiều. Bản cập nhật không mất quá nhiều thời gian và bạn có thể sử dụng tính năng kiểm tra thưa thớt (rất được khuyến nghị) để làm việc trên các phần của kho lưu trữ. Giả sử bạn không cần sửa đổi hàng ngàn tệp, bạn sẽ thấy nó hoạt động khá tốt.

Cam kết 10.000 tệp - một lần nữa, tất cả cùng một lúc sẽ không được nhanh chóng, nhưng 1.000 tệp mười lần một ngày sẽ dễ quản lý hơn nhiều.

Vì vậy hãy dùng thử khi bạn đã có tất cả các tệp trong đó và xem cách hoạt động của tệp. Tất cả điều này sẽ được cố định trong 1,7, khi cơ chế sao chép làm việc được sửa đổi để loại bỏ các thư mục .svn (để giữ khóa đơn giản và nhanh hơn nhiều).

+0

Nó không thực sự là số lượng lớn các tập tin, đó là số lượng lớn các thư mục ảnh hưởng đến hiệu suất nhiều nhất. –

+0

@gbjbaanb @Sander Quá nhiều tệp trong một thư mục có vẻ là vấn đề. Vui lòng xem tại Bản cập nhật 1. – hashable

+0

Tôi đã đề cập đến sự chậm trễ được mô tả bởi @gbjbaanb do thư mục .svn gây ra. Sự chậm lại đó là do có nhiều thư mục, không phải do có nhiều tệp. Ngay cả khóa bản sao làm việc trước khi hoạt động và mở khóa nó sau đó mất rất nhiều thời gian nếu có nhiều thư mục. –

13

Tính đến tháng 7 năm 2008, nhân Linux git repo có khoảng 260.000 tệp. (2.6.26)

http://linuxator.wordpress.com/2008/07/22/5-things-you-didnt-know-about-linux-kernel-code-metrics/

Lúc đó số lượng file, các nhà phát triển hạt nhân vẫn nói git là rất nhanh. Tôi không hiểu tại sao nó lại chậm hơn 500.000 tập tin. Git theo dõi nội dung chứ không phải tệp.

+2

Để tái khẳng định điều này: Tôi vừa thử nghiệm một cam kết về cơ bản viết lại tất cả các nội dung của một kho lưu trữ khổng lồ (26000 tệp, 5GB). Mất khoảng 6 phút, chủ yếu là I/O giới hạn trên một mạng không gắn kết nhanh. Trong trường hợp sử dụng của bạn, các diffs giống như 50MB, vì vậy bạn sẽ thấy thời gian cam kết nhanh hơn nhiều. (Cam kết ban đầu của bạn vẫn có thể mất một lúc - tự nhiên đoán năm phút đến một giờ tùy thuộc vào hệ thống của bạn.) – Cascabel

+6

Hãy nhận biết. Git có một đường cong học tập dốc cho các lập trình viên và có thể gây khó khăn cho những người không lập trình. Tôi bây giờ sử dụng git tất cả các thời gian và không thể làm việc mà không có nó, nhưng nó đã cho tôi một vài tháng để có được thoải mái. Hãy chắc chắn rằng bạn đã sẵn sàng để chìm một số giờ vào đào tạo đồng nghiệp không lập trình của bạn nếu bạn cam kết Git - không có ý định chơi chữ :) – AndyL

+2

@Andy Cảm ơn nhận xét có giá trị về đường cong học tập của Git. – hashable

3

git là đặt cược tốt nhất của bạn. Bạn có thể kiểm tra toàn bộ hệ điều hành (hai gigabyte mã trong vài trăm nghìn tệp) và nó vẫn có thể sử dụng được, mặc dù việc kiểm tra ban đầu sẽ mất khá nhiều thời gian, như khoảng 40 phút.

+2

chỉ 40 phút? Wow! –

+0

Giả sử hệ thống có đĩa nhanh, vâng. Tôi cho rằng SSD sẽ là con đường để đi cho tốc độ tối đa của hệ thống kiểm soát sửa đổi. –

+0

Cảm ơn lời khuyên đó. Vâng. Sử dụng một SSD như HDD máy chủ SVN sẽ tăng tốc độ mọi thứ. – hashable

3
  1. cho svn "chế độ tập tin phẳng" có nghĩa là FSFS Tôi đoán:

    • chắc chắn rằng bạn đang chạy svn mới nhất. FSFS đã tích trữ thêm vào trong ~ 1.5 IIRC sẽ là sự khác biệt về đêm/ngày ở 500k tệp.Hệ thống tập tin cụ thể mà bạn chạy cũng sẽ có tác dụng rất lớn. (Đừng nghĩ về điều này trên NTFS.)
    • Bạn sẽ bị ràng buộc bởi IO với nhiều giao dịch tệp đó. SVN không phải là rất hiệu quả với điều này, có để các tập tin stat trong .svn/cũng như các tập tin thực sự.
  2. git có hiệu suất tốt hơn so với cách svn, và bạn nợ cho chính mình để ít nhất so sánh

+0

@Nathan Có. Tôi tin rằng chúng tôi đang sử dụng phiên bản 1.6.x của SVN. – hashable

+1

và với số lượng tệp, svn 1.7 sẽ có hỗ trợ tốt hơn nhiều bằng cách loại bỏ các thư mục .svn có tác động đáng kể với số lượng tệp rất lớn. Tất nhiên, điều này chưa ra. – gbjbaanb

+1

sharding sẽ giúp bạn khi bạn có một số lượng lớn các bản sửa đổi, nó không cải thiện bất cứ điều gì cho số lượng các tập tin. Đó là các bản sửa đổi được đưa vào kho lưu trữ. –

0

Bạn có thực sự cần một hệ thống tập tin với ảnh chụp nhanh giá rẻ, như ZFS? Bạn có thể cấu hình nó để lưu trạng thái của hệ thống tập tin cứ 5 phút một lần để tận dụng được một số cấp độ lịch sử thay đổi.

+1

Câu trả lời của bạn giống như một câu hỏi (typo?). Dù sao, con trỏ tốt! – paprika

+2

Nó được gọi là phương pháp Socratic ;-) – joeforker

5

cho các tệp ngắn như vậy, tôi sẽ kiểm tra về việc sử dụng cơ sở dữ liệu thay vì hệ thống tệp.

0

Có lý do nào bạn cần phải cam kết 10k tệp đã sửa đổi cho mỗi cam kết không? Subversion sẽ mở rộng tốt hơn nếu mọi người dùng kiểm tra ngay lập tức tệp của mình. Sau đó, một lần mỗi ngày bạn cần 'xuất bản' các tệp, bạn có thể gắn thẻ chúng rất nhanh và chạy phiên bản đã xuất bản từ thẻ

+0

@Sander 10k là giới hạn trên. Người dùng không thể chỉ đăng ký một tệp tại một thời điểm do phụ thuộc giữa các tệp. – hashable

+1

Bạn có nghĩa là bằng cách tự thực hiện công việc của mình, chúng tạo ra tối đa 10k tệp cần phải là một cam kết? Điều đó nghe có vẻ khá nhiều không thể trừ khi các tập tin được tạo ra, trong trường hợp đó nói chung là tốt hơn để lưu trữ các tập tin nguồn trong điều khiển nguồn. –

+0

Công việc thủ công không được thực hiện ở cấp độ tệp. Các chỉnh sửa nhỏ (đối với thông tin được trình bày trong tất cả các tệp chung) có thể dẫn đến một số tệp đang được sửa đổi. Vâng. cho trường hợp giới hạn trên của 10000 sửa đổi tệp, những thay đổi có thể là do sửa đổi tệp có lập trình. (Có cả bản chỉnh sửa của con người và tự động các tệp.) – hashable

3

Tôi khuyên bạn nên Mercurial, vì nó vẫn dẫn đầu trong bộ phận khả năng sử dụng (git's getting getting tốt hơn, nhưng, eh).

bzr cũng tạo ra bước nhảy vọt trong khả năng sử dụng.

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