MySQL İkili Depolama OS Dosya Sistemi VS BLOB'u kullanarak: büyük dosyalar, büyük miktarlarda, büyük sorunlar

0 Cevap php

Versions I am running (basically latest of everything):
PHP: 5.3.1
MySQL: 5.1.41
Apache: 2.2.14
OS: CentOS (latest)

İşte durum.

Ben değişen çok önemli belgeler binlerce var jpg, gif, png, tiff, doc, docx, xls, wav, mp3 sınırlı dahil olmak üzere dosya tipleri ile, imzaları (sözleşmeler için müşteri yetki kayıtları) ses, ancak müşteri sözleşmelerinden , pdf, vb

Bütün bu belgeler şu anda diğerleri arasında Windows 32 bit, CentOS ve Mac dahil olmak üzere çeşitli sunucularda saklanır. Bazı dosyalar da çalışanlar, masaüstü bilgisayarlar ve dizüstü bilgisayarlarda saklanan ve bazıları hala kutuları yüzlerce ve dosya dolapları depolanan sabit kopya vardır.

Müşteriler veya avukatlar, herhangi bir zamanda sözleşmelerin kanıt talep olabilir çünkü şimdi, benim şirket bu dosyaların TÜM dijitalleştirmiş (değilse zaten) ve korelasyon olması, bu nedenle, etkin, doğru belge (ler) arama ve bulmak mümkün bulunmuyor arama ve erişim için sipariş çeşit içine.

Programcısı olarak, tüm şirket kullanan bir tam Müşteri İlişkileri Yönetimi aracı yarattık. Bu vb Müşteri Profili yönetimi, Sipariş ve iş takibi araçları, iş / satış oluşturma ve yönetimi modülleri içerir, ve şu anda bir müşteri profili seviyede (ehliyet, kredi yetki, vb) ya da bir işte gerekli olan herhangi bir dosya / Satılık seviyesi (sözleşmeler, ses imzalar, vb) sunucusuna yüklenen ve sadece Windows Gezgini veya herhangi bir diğer tipik dosya yönetim modeli gibi, bir üst / alt hiyerarşi yapısında oturur edilebilir.

Yapı gibi görünür:

drivers_license
|- DL_123.jpg
voice_signatures
|- VS_123.wav
|- VS_4567.wav
contracts

Yani dosyaları PHP ve Apache kullanarak uplaoded, ve OS dosya sisteminde saklanır. Uploading zamanda, dosya (lar) hakkında bazı bilgiler bir MySQL veritabanında saklanır. Saklanan bilgilerin bir kısmı:

TABLE: FileUploads
FileID
CustomerID (the customer id that the file belongs to, they all have this.)
JobID/SaleID (the id of the job/sale associated, if any.)
FileSize
FileType
UploadedDateTime
UploadedBy
FilePath (the directory path the file is stored in.)
FileName (current file name of uploaded file, combination of CustomerID and JobID/SaleID if applicable.)
FileDescription
OriginalFileName (original name of the source file when uploaded, including extension.)

Gördüğünüz gibi Yani, dosya dosya adı ile veritabanına bağlı. Ben bir kullanıcı indirmek için bir müşteri dosyaları sağlamak istediğiniz zaman yapmam gereken "MüşteriKimliği = 123 OR JobID = 2345 FileUploads SELECT * FROM;" dir ve bu irade çıktı tüm dosya ayrıntıları Ben gerektirir ve FilePath ve dosya adı ile ben indirmek için bağlantıyı sağlayabilir.

http ... sunucu / FilePath / FileName

Bu yöntem ile ilgili sorunlar vardır:

  1. Bu "veritabanı unconcious" ortamında dosya saklamak veri bütünlüğü muhafaza değil demektir. Bir kayıt silinirse, dosya tersi de silinmiş, ya da olmayabilir.
  2. Dosyalar her yerde mayınları, farklı sunucular, bilgisayarlar, vb
  3. Dosya adı veri tabanı ve müşteri profili ve müşteri kayıtlarına ikili uyan tek şey.

vs, vs burada açıklanan bazıları pek çok nedenleri vardır: http://www.dreamwerx.net/site/article01. ? Sietch.net / ViewNewsItem.aspx NewsItemID = 124: burada da ilginç bir makale de var.

SO, çok araştırma sonra ben çok fazla bir BLOB ya LONGBLOB gibi, veritabanında bu dosyaların TÜM saklamak için gidiyorum karar verdik, ama ben bunu daha önce pek çok unsuru hâlâ var.

Ben ancak onları depolama yöntemleri vardır, veritabanında saklayarak uygun bir seçenek olduğunu biliyoruz. Ben de onlara bir şey saklamak biliyorum; bağıntılı ve yönetilebilir bir şekilde onları erişen tamamen başka bir şeydir.

Bu bağlantıyı sağlanan makale: dreamwerx.net/site/article01 64kb parçalar halinde yüklenen ikili dosyaları bölme ve fileID her yığın depolama, ve sonra başlıklarını kullanarak müşteriye gerçek bir ikili dosya akışı bir şekilde anlatılmaktadır. Bu sunucular bellek baskısı altında hafifletir beri bu gerçekten harika bir fikir; yerine RAM içine bütün bir 100mb dosyayı yükleme ve daha sonra istemciye göndermek, o bir anda 64kb yapıyor. Ben bu çalıştı (ve onun komut güncellenmiş) ve bu test çok küçük bir çerçeve içinde, tamamen başarılı olması.

Yani bu yöntem bir orta büyük dosyaları (çift yüz megs için 1kb) depolamak açıdan güçlü, istikrarlı ve sağlam uzun vadeli bir seçenek, ve bu dosyaların büyük miktarlarda olduğunu agreeance iseniz, bana ne diğer hususlar veya fikirler bildirin .

Ayrıca, Dosya Sistemi saklanan dosyaları yönetmek ve veritabanında saklanan dosyaları yönetmek için dönüştürmek için bir arayüz sağlayan bir akım "Dosya Yönetimi" PHP script almak düşünüyor yaşıyorum. Bunu yapar orada herhangi bir yazılım zaten varsa, lütfen bana bildirin.

Ben sorabilirsiniz pek çok soru vardır sanırım, ve tüm bilgileri çok, tüm bu yönleriyle tartışmak lütfen ve biz ileri geri fikir geçmek ve birbirlerine öğretebilir ^ ^ orada olduğunu.

Alkış,

Quantico773

0 Cevap