Có phải thực tế xấu khi lưu trữ thông tin siêu dữ liệu trong tên tệp? Giải pháp nào tốt hơn?


13

Tôi đã nhận thấy nơi tôi làm việc mọi người rất muốn lưu trữ thông tin trong tên tệp và phân tích tên tệp.

Đối với tôi điều này dường như không phải là thực hành đặc biệt tốt. Tôi đã thấy các vấn đề không thường xuyên xảy ra với các tập lệnh toàn cầu cho một tệp và nhận được một lỗi vì một tệp khác khớp trước. Chúng tôi cũng đang thảo luận về cách khắc phục sự cố với các dấu tách cho các trường.

Có được coi là thực hành xấu hay không?

Các giải pháp được chấp nhận khác để truy xuất tệp từ hệ thống tệp dựa trên một số loại siêu dữ liệu là gì?


Nó phụ thuộc rất nhiều vào chính xác những gì đang được lưu trữ trên tên tệp. Bạn có thể cho chúng tôi một số ví dụ?
T. Sar - Tái lập Monica

Câu trả lời:


14

Có tôi nghĩ đó là thực tế xấu. Nó phải chịu tất cả các loại vấn đề - ví dụ như giới hạn độ dài, vấn đề mã hóa và xung đột do dữ liệu trùng lặp.

Tốt hơn là sử dụng "tệp chủ" (đôi khi được gọi là tệp kê khai hoặc chỉ mục) có chứa siêu dữ liệu và đường dẫn đến tệp. Hoặc một cái gì đó tương tự trong cơ sở dữ liệu, đăng ký hoặc không có gì. Hoặc để đặt dữ liệu meta bên trong các tệp thực tế, ở cấp cao nhất của một số cơ sở hạ tầng có trong tệp trong ví dụ JSON hoặc XML.

Điều này hơi giống với khái niệm đưa thông tin hoặc đặt tên khóa vào các cửa hàng khóa-giá trị. Tôi nghĩ rằng điều này là ổn miễn là bạn chỉ sử dụng nó cho không gian tên và thực hiện tra cứu nhanh - các thành phần chính không có ở đó để cung cấp thông tin có thể phân tích được. Nếu bạn cần thông tin đó, sao chép nó vào giá trị (tệp trong trường hợp trên).


3
Bạn đang nâng điểm ruột. Nhưng có những tình huống khi đưa thông tin vào tên tệp có ý nghĩa. Hãy nghĩ về các tệp đính kèm thư phải được định tuyến hoặc xử lý theo cách dựa trên quy tắc. Nếu nhiều quá trình song song phải thay đổi tệp chủ, nó có thể trở thành nút cổ chai.
Axel Kemper

Là một nhà phát triển cơ sở dữ liệu, tôi tự nhiên nghĩ đến việc sử dụng cơ sở dữ liệu thay vì tệp kê khai (một trong những lý do tôi yêu cầu ở đây cho các phương pháp thay thế). Điều đó sẽ giải quyết vấn đề truy cập đồng thời, nhưng là một giải pháp phức tạp hơn.
wobbily_col

1
@wobbily_col, tùy thuộc vào hệ thống mà bạn sử dụng, có thể có hỗ trợ cho các thuộc tính tệp mở rộng có sẵn.
Hellion

@AxelKemper Chỉ có rất nhiều thông tin bạn có thể điền vào tên. Có nhiều siêu dữ liệu hơn tên và tác giả.
Tulains Córdova

Chưa kể tên tệp có thể được thay đổi bởi một người nào đó bên ngoài hệ thống của bạn, phá vỡ mọi định dạng dự kiến. Ngay cả khi bạn có quyền truy cập tệp thích hợp được thi hành, cuối cùng nó vẫn là một giải pháp dễ vỡ.
Berin Loritsch

5

Đầu tiên, siêu dữ liệu là một khái niệm mờ.

Điều đó nói rằng, nhiều trường hợp siêu dữ liệu trong các tệp đã tồn tại:

  • số phiên bản của thư viện
  • ngày và thời gian của hình ảnh, hoặc ít nhất là chỉ mục chuỗi
  • loại tệp, kích hoạt ứng dụng nào sẽ mở tệp
  • Tên thư mục nhà của bạn, phải là tên người dùng phiên của bạn

Tuy nhiên, danh sách ngắn đó không phải là một đối số có lợi cho thực tiễn.

Các lựa chọn thay thế là:

  • xử lý siêu dữ liệu ở cấp độ FS, chẳng hạn như HFS cũ của Apple
  • đặt siêu dữ liệu vào chính tệp, như Exif cho hình ảnh hoặc ID3 cho âm thanh
  • đặt siêu dữ liệu trong một tệp khác hoặc trong cơ sở dữ liệu, giống như hầu hết các trình quản lý phương tiện.

5
Tất cả mọi thứ là một khái niệm mờ. Ngay cả "mờ", "khái niệm" và "mọi thứ" là những khái niệm mờ.
Tulains Córdova 23/1/2015

3

Có vẻ như bạn cần một cơ sở dữ liệu.

Có rất nhiều vấn đề bảo mật với việc đưa dữ liệu người dùng vào tên tệp. Giả sử bạn có một tệp cho mỗi người dùng ("username.txt"). Điều gì xảy ra khi ai đó đăng ký tên người dùng "../../../../etc/passwd" phụ thuộc vào cách bạn lọc đầu vào của người dùng.

Khung cơ sở dữ liệu đôi khi sẽ hỗ trợ bạn vệ sinh đầu vào của người dùng.


Trên thực tế, nhiều hệ điều hành lưu tên người dùng trong tên thư mục, được gọi là thư mục chính .
mouviciel

Đó là bởi vì phần mềm sombody phải ở dưới cùng của ngăn xếp. Điều đó không có nghĩa là mọi người phải làm việc ở cấp độ đó. Tôi sẽ không tranh luận về công dụng của cơ sở dữ liệu, bởi vì các lập trình viên đã sử dụng chúng trong hơn 50 năm.
Eric Wimberley

1
@mouviciel Tôi không biết bất kỳ hệ điều hành nào phân tích tên người dùng ra khỏi tên thư mục nhà của người dùng. Cả hai hệ thống giống như Windows và Unix đều lưu trữ tên của thư mục trong một số loại cơ sở dữ liệu và tải nó vào môi trường khi người dùng đăng nhập. Trong cả hai hệ thống, bạn có thể kết thúc với tên thư mục chính khác với tên người dùng ( ví dụ: đổi tên người dùng hoặc nếu bạn có hai cửa sổ trên cùng một phân vùng hệ thống).
Jules

2

Không ... à .. không nhất thiết.

Vì vậy, miễn là bạn có một quy ước nghiêm ngặt và các phương tiện phân tích và xác thực phổ biến (tập lệnh, thư viện, v.v.) sẵn sàng, bạn sẽ sẵn sàng.

Lấy ví dụ như hệ thống quản lý đóng gói và phụ thuộc (Maven, NuGet và những thứ tương tự). Mặc dù nhiều người sẽ sử dụng các tệp cụ thể cho siêu dữ liệu để lưu trữ thông tin nâng cao hơn, thông tin cơ bản thường là một phần của tên tệp. Dựa vào các quy ước nghiêm ngặt, tên tệp có thể chứa thông tin thích hợp nhất về gói: nhà cung cấp, tên, phiên bản, loại. Đôi khi đó là tất cả những gì bạn cần ... 4 hoặc 5 mẩu thông tin ngắn.

Nếu siêu dữ liệu đơn giản thì một quy ước đặt tên tệp có ý nghĩa hoàn hảo không đòi hỏi phải đặt gì vào vị trí. Nó có thể được củng cố với các công cụ và tập lệnh rất đơn giản, không cần cơ sở dữ liệu, không có cơ sở hạ tầng chuyên dụng chỉ có một vài tập lệnh và quy ước đặt tên.

Nếu không có gì ngoài đó làm những gì bạn cần và nhu cầu của bạn thật đơn giản, tôi sẽ bắt đầu với điều này.

yêu cầu của bạn vượt xa quy ước này? mở rộng nó với một tệp siêu dữ liệu thích hợp. Bạn sau này cần tìm kiếm tốt hơn cho điều này? Hiện đã có các giải pháp tốt để tìm kiếm các tệp đưa bạn đến nơi bạn cần.

Không phải là tôi không thích cơ sở dữ liệu, hoàn toàn ngược lại, chúng thực sự mạnh mẽ và hữu ích nhưng chúng đòi hỏi một số chi phí để thực hiện. Chúng cần được cài đặt, sao lưu, bảo trì, bạn sẽ cần nhân viên, nếu không hoàn toàn tận tâm, sẽ cần dành một phần thời gian của họ cho cơ sở hạ tầng này. Chúng cũng phức tạp và khó hiểu hơn đối với giáo dân, mất đi nhà phát triển đã thiết lập bạn và hệ thống của bạn sẽ bị kẹt trong thời gian cho đến khi bạn tìm được người thay thế.

Đừng bao giờ đánh giá thấp sức mạnh của công nghệ thấp với sự giám sát phù hợp, nó có thể giúp bạn đi một chặng đường dài.

Và khi bạn phát triển vượt trội giải pháp công nghệ thấp, bạn sẽ thu thập tất cả kinh nghiệm và yêu cầu để thực hiện hệ thống hoàn hảo cho nhu cầu của bạn.


Đừng bao giờ đánh giá thấp sức mạnh của quán tính. Thay đổi một giải pháp công nghệ thấp thành một thứ gì đó mạnh mẽ hơn sẽ tốn nhiều công sức hơn là không làm theo cách đó để bắt đầu.
Berin Loritsch

1
Đối số tương tự @BerinLoritsch áp dụng cho tất cả các giải pháp, công nghệ thấp hoặc hitech ... người ta có thể lập luận rằng hitech yêu cầu nhiều phụ thuộc hệ thống hơn thực sự làm cho tình huống này tồi tệ hơn, không dễ dàng hơn. Điều đó nói rằng, có một ngưỡng mà một giải pháp công nghệ thấp đơn giản trở nên phức tạp hơn so với đối tác công nghệ cao đầy đủ của nó.
Newtopian

1
Đúng, và tôi đang gỡ một vài ví dụ như vậy trong một dự án. Điểm mấu chốt là không cần phải có giao diện chặt chẽ hơn hệ thống tập tin nhiều lần hơn không. Thật không may, hầu hết các hệ thống công nghệ thấp mà tôi thừa kế không có suy nghĩ hoặc thiết kế phù hợp áp dụng cho chúng. Số lượng các trường hợp ngoại lệ tôi có thể đếm trên một tay.
Berin Loritsch

0

Đầu tiên, chúng ta hãy đồng ý những gì một tập tin . Một tệp là một dữ liệu được đóng gói với một tên có thể được truyền, nhận, tạo và xóa bằng (rất gần với) các hoạt động nguyên tử.

Nhiều hệ thống tệp (Mac OS và các hệ thống tệp Linux gần đây) triển khai "nhánh", thường được sử dụng để lưu trữ tài nguyên và siêu dữ liệu. Cách tiếp cận này để lưu trữ siêu dữ liệu có vấn đề ở các phương thức truyền mạng, phương thức sao lưu và khôi phục và phương pháp sao chép tệp không nhất quán, đặc biệt là khi hệ thống tệp nguồn và đích hiểu cách khác nhau.

Tên tệp được sử dụng để giữ siêu dữ liệu vì a) nó luôn ở đó, b) siêu dữ liệu luôn có trong tên tệp (ít nhất là trong việc sử dụng phần mở rộng tệp) và c) tên tệp trải qua rất ít bản dịch khi di chuyển giữa các hệ thống (phân biệt trường hợp, giới hạn bộ ký tự, giới hạn ký tự sang một bên).

Vì vậy, tên tệp có thể nhìn thấy, di động và có thể quản lý. Đây không phải là một điều xấu để lưu trữ một số siêu dữ liệu.

Có lẽ giải pháp tốt nhất để giải quyết siêu dữ liệu tệp chung là sử dụng kho lưu trữ nội dung , trong đó kho lưu trữ nội dung có thể được cấu hình với lược đồ siêu dữ liệu được sử dụng cho các tệp. Trong nhiều trường hợp, điều này là quá mức cần thiết, nhưng, IMHO, là cách để quản lý siêu dữ liệu nghiêm trọng.


0

Tôi cho rằng điều này là bạn có thể đã thấy một số mã ở đâu đó làm những thứ cẩu thả hoặc dễ vỡ với tên tệp, nhưng điều đó không có nghĩa là "lưu trữ siêu dữ liệu trong tên tệp" nói chung là xấu.

Tên tệp siêu dữ liệu - chúng là dữ liệu về dữ liệu trong tệp, độc lập với chính dữ liệu tệp. Trong thực tế, tên tệp quá cũ đến mức chúng có thể là ví dụ điển hình của siêu dữ liệu.

Nếu bạn cho rằng các phần mở rộng tệp chỉ là phần cuối của tên tệp, thì khái niệm siêu dữ liệu tên tệp càng trở nên khó tránh khỏi.

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.