Những loại cơ sở dữ liệu nào `` updateb` và` location` sử dụng?


25

Các locatechương trình findutilsquét một hoặc nhiều cơ sở dữ liệu của tên tập tin và hiển thị bất kỳ trận đấu. Điều này có thể được sử dụng như một findlệnh rất nhanh nếu tệp có mặt trong lần cập nhật cơ sở dữ liệu tên tệp cuối cùng.

Có nhiều loại cơ sở dữ liệu hiện nay,

Vì vậy, loại cơ sở dữ liệu nào updatedbcập nhật và locatesử dụng?

Cảm ơn.


Bất kể việc định vị có thực sự sử dụng BerkelyDB hay không, điều đó đáng để bạn điều tra - đó là một kho lưu trữ khóa-giá trị dựa trên đĩa rất cũ, đơn giản, hiệu quả.
pjc50

@ pjc50 Tôi rất thích. Các tập tin cho cơ sở dữ liệu ở đâu? Làm thế nào tôi sẽ xem nội dung của họ?
Tim

Để xác định vị trí? serverfault.com/questions/454127/ trộm
pjc50

"Không tìm thấy trang", liên kết phải là serverfault.com/questions/454127/ Kẻ
Tim

Vậy "khóa" và "giá trị" thể hiện điều gì trong cơ sở dữ liệu? Nếu tôi hiểu nhận xét của Stephen Kitt unix.stackexchange.com/questions/379725/ , chính xác, cơ sở dữ liệu không phải là khóa-giá trị.
Tim

Câu trả lời:


29

Việc triển khai locate/ updatedbthường sử dụng các cơ sở dữ liệu cụ thể phù hợp với yêu cầu của họ, thay vì một công cụ cơ sở dữ liệu chung. Bạn sẽ tìm thấy những cơ sở dữ liệu cụ thể được ghi lại theo từng cách thực hiện; ví dụ:

  • GNU findutils'được ghi lại locatedb(5)và gần như chỉ là một danh sách các tệp (với thuật toán nén cụ thể);
  • mlocateTài liệu được ghi lại mlocate.db(5)và cũng có thể được coi là danh sách các thư mục và tệp (có siêu dữ liệu).

Cảm ơn. Tôi có thể học các nguyên tắc thiết kế và triển khai cơ sở dữ liệu cụ thể phù hợp với yêu cầu cụ thể ở đâu và như thế nào? Tôi đánh giá cao bất kỳ tài liệu tham khảo để đọc.
Tim

11
Cơ sở dữ liệu thiết kế nắm để thiết kế cấu trúc dữ liệu, vì vậy tìm hiểu về những người, và sau đó về kích thước so với tốc độ thiết kế thương mại-offs ... Tôi không biết của một tài nguyên cụ thể đó sẽ là tốt, có lẽ cái gì đó như Pearls trình sẽ một giới thiệu tốt đẹp về cách suy nghĩ về các chủ đề này (và không nghĩ quá nhiều về chúng).
Stephen Kitt

Cảm ơn. Tôi đã học được điều gì đó về cấu trúc dữ liệu và câu hỏi tiếp theo sẽ là tìm tài liệu tham khảo và cách đi từ cấu trúc dữ liệu đến cơ sở dữ liệu.
Tim

2
Cơ sở dữ liệu được sử dụng locatechỉ là các cấu trúc dữ liệu được lưu trữ trên đĩa, do đó việc đi từ cấu trúc dữ liệu đến cơ sở dữ liệu tương ứng là tương đối đơn giản. Chuyển đến cơ sở dữ liệu như câu hỏi của bạn trình bày chúng là một điều hoàn toàn khác; Có những cuốn sách và khóa học dành riêng cho những chủ đề đó. Thiết kế và phát triển một hệ thống quản lý cơ sở dữ liệu như MongoDB hoặc PostgreSQL là một trong những vấn đề khó khăn hơn trong khoa học máy tính và công nghệ phần mềm hiện nay, đặc biệt là khi bạn gặp phải vấn đề phân tán.
Stephen Kitt

2
Tôi đã thực hiện một chút công bằng với định vị & mlocate.db trong những năm qua. Ban đầu tôi có mã perl để tạo một định vị cho dlocatechương trình của mình trong debian. Cuối cùng tôi phát hiện ra rằng chỉ cần greping một tệp văn bản nhanh hơn nhiều lần so với tìm kiếm một vị trí, và đưa ra kích thước của các đĩa ngày nay, tiết kiệm kích thước tệp là không đáng kể. Vì vậy, tôi chuyển sang chỉ grep. Tôi cũng có một công việc cron cục bộ chuyển mlocate.db thành văn bản thuần sau khi công việc cron mlocate chạy, mà tôi tìm kiếm với một qlocatetập lệnh shell cục bộ .... nhanh hơn nhiều so với chạy mlocatevà cũng có một số tùy chọn bổ sung hữu ích.
cas

13

Có vẻ là một tệp phẳng của các cấu trúc C, được viết / đọc bằng cách sử dụng Macro Gnu LibC OBSTACKS

Xem nguồn

https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720

https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413

Bạn có thể nhận được một cái gì đó tương tự với

find / -xdev -type f -not -path \*\.git\/\* | gzip -9 > /tmp/files.gz
zgrep file_i_want /tmp/files.gz

2
Cảm ơn. Hai lệnh cuối cùng đang làm gì?
Tim

2
@Tim Lệnh đầu tiên là tìm kiếm filesystem ( find) từ thư mục root ( /), mà không giảm dần vào các thư mục trên các hệ thống tập tin khác ( -xdev), các tệp thông thường ( -type f), không phải trong các *.gitthư mục ( -not -path \*\.git\/\*). Nó nén đầu ra ( | gzip -9) và lưu nó vào tệp /tmp/files.gz( > /tmp/files.gz). Dòng tiếp theo đang tìm kiếm zgreptệp file_i_wanttrong tệp nén/tmp/files.gz
piotrekkr

2

Theo như tôi biết đằng sau là Berkeley DB là cơ sở dữ liệu không có khóa / giá trị. Theo liên kết để biết thêm. Trích từ Wikipedia:

Berkeley DB (BDB) là một thư viện phần mềm nhằm cung cấp cơ sở dữ liệu nhúng hiệu năng cao cho dữ liệu khóa / giá trị. Berkeley DB được viết bằng C với các ràng buộc API cho C ++, C #, Java, Perl, PHP, Python, Ruby, Smalltalk, Tcl và nhiều ngôn ngữ lập trình khác. BDB lưu trữ các cặp khóa / dữ liệu tùy ý dưới dạng các mảng byte và hỗ trợ nhiều mục dữ liệu cho một khóa. Berkeley DB không phải là một cơ sở dữ liệu quan hệ.

Vị trí của cơ sở dữ liệu trong RHEL / CentOS là /var/lib/mlocate/mlocate.db(không chắc chắn về các bản phân phối khác). Lệnh locate --statisticssẽ cung cấp cho bạn thông tin về vị trí và một số thống kê về cơ sở dữ liệu (ví dụ):

Database /var/lib/mlocate/mlocate.db:
        16,375 directories
        242,457 files
        11,280,301 bytes in file names
        4,526,116 bytes used to store database

Đối với định dạng mlocate ở đây là phần đầu của trang man:

Cơ sở dữ liệu mlocate bắt đầu bằng tiêu đề tệp: 8 byte cho số ma thuật ("\ 0mlo- cate" như chữ C), 4 byte cho kích thước khối cấu hình ở cuối lớn, 1 byte cho phiên bản định dạng tệp (0), 1 byte cho các yêu cầu hiển thị cờ cờ cờ (0 hoặc 1), đệm 2 byte và tên đường dẫn kết thúc NUL của thư mục gốc của cơ sở dữ liệu.

Tiêu đề được theo sau bởi một khối cấu hình, bao gồm để đảm bảo cơ sở dữ liệu không được sử dụng lại nếu một số thay đổi cấu hình có thể ảnh hưởng đến nội dung của chúng. Kích thước của khối cấu hình tính bằng byte được lưu trữ trong tiêu đề tệp. Khối cấu hình là một chuỗi các bài tập biến, được sắp xếp theo tên biến. Mỗi phép gán có thể bao gồm một tên biến kết thúc NUL và một danh sách được sắp xếp của các giá trị kết thúc NUL. Danh sách giá trị được chấm dứt bởi một ký tự NUL nữa. Thứ tự được sử dụng được xác định bởi hàm strcmp ().


2
Nó phụ thuộc vào việc thực hiện locate/ updatedb...
Stephen Kitt

2
mlocatechắc chắn nhất không sử dụng Berkeley DB.
Stephen Kitt

1
Bạn có nguồn nào ủng hộ yêu cầu BerkeleyDB của mình không? Phần thứ hai của câu trả lời của bạn mâu thuẫn với nó.
Mat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.