MySQL diziler saklanması?

6 Cevap php

Facebook FQL sayfalarında bu FQL tablo yapısını gösterir, burada bunun bazı (ekran gitti) göstermek için aşağıda bir ekran görüntüsü.

Bazı ürün bir tür meeting_sex gibi dizi, meeting_for current_location olduğunu göreceksiniz. Ben sadece merak ediyorum, onlar mysql bir dizi olarak bu depolamak ya da sadece gerçekten bana bir dizi olarak saklanır düşündürüyor Bu verilerden, biri olarak dönüyor sanıyorsun. Eğer o, ya da benzer yaptıysanız, 1 masa alana bir dizi olarak bu öğeleri saklamak ve daha sonra bir PHP sayfada bir dizi olarak almak için iyi bir yol ne olduğunu düşünüyorum IF?

alt text

6 Cevap

Bir veritabanında bir dizi depolamak için doğru yolu dizinin her bir elemanı tabloda bir satır bir tablo olarak saklayarak gereğidir.

Her şey kesmek, ve sonunda ekstra bir tablo önlemek için denemek için karar pişman yapacak.

I guarantee Seni Facebook kendi veritabanında içeride dizilerde bu verileri depolamak olmadığını.

Eğer FQL hakkında gerçekleştirmek zorunda şey, doğrudan Facebook'un ana veri sunucuları sorgulama olmamasıdır. FQL performans gereksinimleri gerçek sunucular üzerinde çılgın sorguları çalıştırmak vermeden temel sosyal verilerine size erişim sağlamak için tasarlanmış bir kabuk vardır. Ana veritabanında Keyfi, kullanıcı tarafından oluşturulan sorgular fonksiyonel intihar olur.

O alır önce böyle, (örneğin "meeting_for" gibi) birden fazla dernek var, veri herhangi bir parça bir diziye paketleniyor kadar FQL, sorguladığınız veri türü için uygun, iyi tasarlanmış bir veri getiri yapısını sağlar bir API sonuç olarak döndü.

Diğer posterleri de söylediğim gibi, bir veritabanı (bu şeylerin kavramı yok olan) içinde (örneğin bir dizi ya da bir nesne gibi) bir programlama dili yapısını saklamak için tek yol, serialize bunu etmektir. Dizgeleştirme pahalı ve en kısa sürede bir şey serialize gibi, etkili bir indeksleme ve arama için kullanılmaz hale. Bir sosyal ağ olan Facebook indeksi gerekiyor ve hemen hemen her şeyi aramak, bu nedenle bu veriler, ana şemaların içine dizi formunda var asla.

Böyle oturum verileri gibi, geçici, ya da bunu yapmak için geçerli bir performans gereksinimi var nerede ise genellikle hiç bir veritabanı içinde tefrika verilerini depolamak istediğiniz tek zamandır. Aksi takdirde, veri çabuk işe yaramaz hale gelir.

Diğer tabloları içine dışarı ayrıldı. Bunu serileştirebilirsiniz ancak daha sonra bu verileri sorgulamak istiyorum garanti olacaktır. Hayal kırıklığı sonra kendinizi kaydedin ve şimdi dışarı ayrıldı.

Eğer dizi serileştirebilirsiniz, takın, ve sonra onu geri almak ne zaman unserialize.

Bunlar çok-çok ilişkileri ile birden fazla tablo kullanıyor olabilirsiniz, ancak kullanım katılır ve MySQL'in GROUP_CONCAT fonksiyonu tek sorguda bu sütunlar için bir dizi olarak değerler döndürmek için.