2012-12-12 37 views
8

Làm cách nào để kiểm tra xem liệu chỉ mục có tồn tại không? - trước khi gọi:RavenDb kiểm tra xem chỉ mục có tồn tại

IndexCreation.CreateIndexes(typeof(MyIndexClass).Assembly, documentStore); 

Tất cả các ví dụ tôi đã thấy (bao gồm cả những dự án mẫu) đã tạo chỉ mục mỗi khi khách hàng bắt đầu có vẻ không ổn.

Chiến lược chung là gì? Nó có vẻ như có hoạt động CRUD bình thường, sau đó có các lệnh quản trị như chỉ mục ở trên. Mọi người chỉ cần tạo một ứng dụng giao diện điều khiển mà quản trị viên triển khai và chạy/chạy riêng biệt với ứng dụng chính?

+0

Tôi biết rằng điều này không trả lời câu hỏi của bạn, nhưng tôi cảm thấy điều đáng nói đến là RavenDB tự động tạo các chỉ mục cho bạn nếu bạn để nó. Xem [trang tài liệu RavenDB này] (http://ravendb.net/docs/client-api/querying) và đặc biệt là phần về chỉ mục động. – ean5533

+0

@ ean5533 - áp dụng cho chỉ mục động, vâng. Tôi tin rằng OP quan tâm đến việc tạo ra các chỉ số tĩnh. –

Trả lời

18

Bạn không phải kiểm tra sự tồn tại. Máy chủ sẽ tự động so sánh định nghĩa chỉ mục mà bạn gửi và kiểm tra xem nó đã tồn tại chưa. Nếu một người tồn tại với cùng tên và định nghĩa thì nó sẽ bị bỏ lại một mình. Nếu một tên tồn tại có cùng tên, nhưng định nghĩa đã thay đổi, thì định nghĩa cũ sẽ bị loại bỏ và cái mới được tạo ra.

Thông thường, một người sẽ tạo các chỉ mục trong cùng một ứng dụng, khi khởi động ứng dụng. Đối với các ứng dụng web có thể nằm trong global.asax và đối với các ứng dụng trên bàn điều khiển/máy tính để bàn, nó sẽ chỉ là phần đầu tiên của mã khởi động.

Nhưng đôi khi điều đó là không thể, chẳng hạn như nếu bạn có nhiều cơ sở dữ liệu khác nhau, vì các ứng dụng nhiều người thuê thường làm. Trong những trường hợp đó, bạn sẽ tạo các chỉ mục khi bạn tạo từng cơ sở dữ liệu người thuê và bạn có thể cần cập nhật hoặc tạo thêm các chỉ mục khi bạn triển khai nâng cấp phiên bản.

Ngoài ra, tôi nên đề cập đến việc bạn có thể tạo chỉ mục theo một vài cách khác nhau.

// scans the assembly for all indexes and creates them 
IndexCreation.CreateIndexes(assembly, documentStore); 

// scans a MEF catalog for all indexes and creates them 
IndexCreation.CreateIndexes(catalog, documentStore); 

// puts a single index the HARD way 
documentStore.DatabaseCommands.PutIndex(...); 

// puts a single index the easy way 
documentStore.ExecuteIndex(new YourIndexCreationTask()); 

Có một vài người khác, nhưng bạn sẽ có được ý tưởng.

Và chỉ để được triệt để, nếu bạn thực sự đã muốn kiểm tra chỉ số tồn tại, bạn có thể sử dụng:

documentStore.DatabaseCommands.GetIndex("YourIndex") != null 

Nhưng đó sẽ chỉ kiểm tra theo tên, không theo định nghĩa. Và bạn không cần nó.

+0

cảm ơn lời giải thích. Tôi đã có một "khoảnh khắc" sau khi đọc nó! – trailmax

+0

Lời khuyên này có vẻ không đúng. Nếu tôi gọi PutIndex trên một chỉ mục đã tồn tại, tôi nhận được một InvalidOperationException - Chỉ mục đã tồn tại. Tôi đang sử dụng v2.5. Tôi có làm điều gì sai ? – Chris

+2

bạn có tùy chọn ghi đè bằng cách đặt đối số thứ 3 thành true –

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