Gelecek geçirmez dosya depolama

5 Cevap php

I accept file uploads from users. Each file has a pointer in the db which has info on the file location in the filesystem. Currently, I'm storing the files in the filesystem non categorically, and each file is currently just named a unique value. All categorisation and naming etc is done in the app using the db.

A factor that I'm concerned about is that of file synchronization issues. If I wanted to set up file system synchronization where, for example, the user's files are automatically updated by bridging with a pc app, would this system still work well? I have no idea how such a system would work so hopefully I can get some input.

Temel olarak, sözü edilen dosyanın bir pc uygulaması ile senkronize olabilir, özellikle eğer, veritabanı optimum olarak tamamen bir dosyanın adını ve konumunu temsil edecek?

5 Cevap

Evet, bu yapıyorsun şekilde yapmak için en iyi yoldur. Sen boğaz yapılandırılmış veri dosyaları ve bir veritabanında depolamak için bir dosya sistemi kullanıyor.

Ben yapacak bir öneri dosya sisteminde bir dizin ağacı oluşturmak olmasıdır. Eğer bir gün dosya sisteminin dizin sınırlaması başına maksimum dosyalara karşı çalıştırabilirsiniz. Ben her gün veya hafta için yeni bir alt dizin oluşturmak sistemleri kurduk.

Eğer iyi bir veritabanı yedekleme yanı sıra belge deposu olduğundan emin olun.

Eğer böyle bir sistem iş yapmak için gereken tüm (ya da, daha büyük olasılıkla) oluşturmak emin kullanmak API yapmak mantıklı bir şekilde veritabanına ve dosya sistemi konuşabilirsiniz etmektir. Bu site zaten zaten ne yapıyor olduğundan, uygulamak zor shoudn't.

Dosyalarınızı düz-İngilizce adları yerine tanımlayıcılar verildiğini gerçeği, uzaktan senkronizasyon ile ilgili çoğunlukla ilgisizdir.

Yerine (yani SHA1) bir yolu daha veritabanındaki bir dosya karma Mağaza ve ayrı bir veritabanı yolu ile karma bağlantı var. Eğer farklı bir konuma dosyaları taşıdığınızda güncellenen yolları ile yeni bir veri tabanı oluşturmak için kolay olacak böylece karma veritabanı senkronize olacak küçük bir app yazın.

Ayrıca sistem bazı şeffaflık sunduğu böylece dosyayı bulmak için hangi karma veritabanı bağlı olarak farklı bir konuma gelen dosyayı yüklemek olabilir Bu şekilde insanlar çeşitli yerlerde (örneğin nfs veya aynı dosyaya erişmek mümkün olması gerekiyorsa WebDAV).

Biz SabreDAV bu son kullanıcı normal bir dosya sistemi var gibi görünüyor yapmak için (utanmaz fişi) ile birlikte dosya depolama için tam da bu modeli kullanabilirsiniz.

Ben sürece dosyayı görünümlü olarak belgelenmiş ve kolayca alınan bir sorun olmamalı, bu bir mükemmel iyi bir model olduğunu düşünüyorum. Sadece DB yedekleme yapmak :)

Ben verebilirim Bir diğer tavsiyem, benzersiz bir dosya adı oluşturmak için dosya kimliği üzerinde bir md5 () kullanın. B026324c6904b2a9cb4b88d6d61c81d1, çıkan dosya olacak: örneğin .. id 1 verecektir Biz bir dizin yapısı oluşturmak için dosyaları parçalar kullanın:

b02/632/4c6/904b2a9cb4b88d6d61c81d1 Bunun nedeni, en istikrarlı dosya sistemleri tek bir dizin içinde dosya (ya da dizinleri) yüksek bir sayıdan sonra çok yavaş olabilir olmasıdır. Bu çok daha hızlı çok birkaç alt-dizinleri katediyor fazla.

Boring Cevap ™:

Ben her zaman olduğu gibi, istediğini ne bağlıdır düşünüyorum :)

Ben normal bir web hosting şirketi almak anlamına gelir. Geliştiriciler, web sunucularına her zaman dosyaları eşzamanlı vardır. Fiziksel dosyalara işaret bir db karma oluşturulan dosya adlarını depolamak için bir web sunucusu için mantıklı olur? Hayır Sonra FTP istemcisi ile giriş ve bunun gibi dosya yükleyebilir ve Apache vs Anında baş ağrısı işe almak için özel bir modül kod olurdu olamazdı.

Flickr bir db kullanmak için mantıklı mı? Evet, kesinlikle! (Sonra tekrar, bir FTP istemcisi ile oturum ve yönetmek fotoğraflarınızı ve muhtemelen iyi bir şey olamaz!)

Sadece çok bir dosya sistemi (çok basit) olduğu, db hatırlıyorum. Ve yararlı ücretsiz birçok araç ile birlikte gelen bir db var.

benim 2 ¢

/0