Apa praktik terbaik dalam membuat struktur database file datar di PHP?
Banyak kerangka kerja file datar PHP yang lebih matang di luar sana yang saya coba untuk mengimplementasikan sintaks kueri seperti SQL yang berada di atas untuk tujuan saya dalam banyak kasus. (Saya hanya akan menggunakan database pada saat itu).
Apakah ada trik elegan di luar sana untuk mendapatkan kinerja dan fitur yang baik dengan sedikit biaya tambahan?
for loop
(kecuali saya menggunakan semua data di folder), oleh karena itu performanya jauh lebih cepat daripada database. Saya akan menjelaskan secara detail dan memberikan jawaban yang sangat bagus tetapi sayangnya pertanyaan ini sudah ditutup.Jawaban:
Nah, apa sifat dari flat database. Apakah mereka besar atau kecil. Apakah itu array sederhana dengan array di dalamnya? jika itu sesuatu yang sederhana katakanlah profil pengguna dibangun seperti itu:
dan untuk menyimpan atau memperbarui data db untuk pengguna tersebut.
dan memuat rekaman untuk pengguna
tetapi sekali lagi implementasi ini akan berbeda-beda pada aplikasi dan sifat database yang Anda butuhkan.
sumber
Anda mungkin mempertimbangkan SQLite . Ini hampir sesederhana file datar, tetapi Anda mendapatkan mesin SQL untuk membuat kueri. Ia bekerja dengan baik dengan PHP juga.
sumber
Menurut pendapat saya, menggunakan "Flat File Database" dalam arti yang Anda maksud (dan jawaban yang Anda terima) bukanlah cara terbaik untuk melakukan sesuatu. Pertama-tama, menggunakan
serialize()
danunserialize()
dapat menyebabkan sakit kepala MAYOR jika seseorang masuk dan mengedit file (mereka sebenarnya dapat menempatkan kode arbitrer di "database" Anda untuk dijalankan setiap saat.)Secara pribadi, menurut saya - mengapa tidak melihat ke masa depan? Sering kali saya mengalami masalah karena saya telah membuat file "berpemilik" saya sendiri, dan proyek tersebut telah meledak ke titik di mana ia membutuhkan database, dan saya berpikir "Anda tahu, saya harap Saya telah menulis ini untuk database untuk memulai dengan "- karena refactoring kode membutuhkan terlalu banyak waktu dan tenaga.
Dari sini saya telah belajar bahwa pembuktian masa depan aplikasi saya sehingga ketika semakin besar saya tidak perlu pergi dan menghabiskan berhari-hari refactoring adalah cara untuk maju. Bagaimana saya melakukan ini?
SQLite. Ini berfungsi sebagai database, menggunakan SQL, dan cukup mudah untuk diubah ke mySQL (terutama jika Anda menggunakan kelas abstrak untuk manipulasi database seperti yang saya lakukan!)
Faktanya, terutama dengan metode "jawaban yang diterima", metode ini dapat secara drastis memotong penggunaan memori aplikasi Anda (Anda tidak perlu memuat semua "RECORDS" ke dalam PHP)
sumber
serialize()
bisa sangat berguna untuk itu juga. Saya pikir trik untuk menghasilkan sistem yang layak adalah menemukan beberapa cara untuk mengindeks node data tanpa membunuh diri Anda sendiri dengan kerumitan.Satu kerangka kerja yang saya pertimbangkan adalah untuk platform blogging. Karena hampir semua kemungkinan tampilan data yang Anda inginkan akan diurutkan berdasarkan tanggal, saya memikirkan tentang struktur ini:
Satu direktori per node konten:
Subdirektori dari setiap node termasuk
Serta file teks sederhana di direktori node untuk konten pra-dan pasca-render dan sejenisnya.
Ini akan memungkinkan
glob()
panggilan PHP sederhana (dan mungkin pembalikan larik hasil) untuk menanyakan apa saja di dalam struktur konten:Akan mengembalikan jalur termasuk semua artikel yang ditandai "lucu".
sumber
Berikut kode yang kami gunakan untuk Lilina:
Ini menyimpan setiap entri sebagai file terpisah, yang kami temukan cukup efisien untuk digunakan (tidak ada data yang tidak diperlukan dimuat dan lebih cepat disimpan).
sumber
Jika Anda akan menggunakan file datar untuk mempertahankan data, gunakan XML untuk menyusun data. PHP memiliki parser XML bawaan .
sumber
Jika Anda menginginkan hasil yang dapat dibaca manusia, Anda juga dapat menggunakan jenis file ini:
Dengan cara ini, Anda hanya memiliki satu file, Anda dapat men-debugnya (dan memperbaikinya secara manual) dengan mudah, Anda dapat menambahkan kolom nanti (di akhir setiap baris) dan kode PHP sederhana (untuk setiap baris, pisahkan menurut |).
Namun, kekurangannya adalah Anda harus mengurai seluruh file untuk mencari sesuatu (jika Anda memiliki jutaan entri, tidak masalah) dan Anda harus menangani pemisah dalam data (misalnya jika nama panggilannya adalah WaR | ordz).
sumber
Saya telah menulis dua fungsi sederhana yang dirancang untuk menyimpan data dalam sebuah file. Anda dapat menilai sendiri apakah itu berguna dalam kasus ini. Intinya adalah menyimpan variabel php (jika itu berupa array, string atau objek) ke file.
sumber
Yang ini menginspirasi sebagai solusi praktis:
https://github.com/mhgolkar/FlatFire
Menggunakan berbagai strategi untuk menangani data ...
[Disalin dari File Readme]
Bebas atau Terstruktur atau Campuran
sumber
IMHO, Anda memiliki dua opsi jika Anda ingin menghindari homebrewing sesuatu:
SQLite
Jika Anda terbiasa dengan PDO, Anda dapat menginstal driver PDO yang mendukung SQLite. Tidak pernah menggunakannya, tapi saya telah menggunakan PDO satu ton dengan MySQL. Saya akan mencoba proyek ini saat ini.
XML
Lakukan ini berkali-kali untuk jumlah data yang relatif kecil. XMLReader adalah kelas ringan, baca-maju, dan bergaya kursor. SimpleXML membuatnya mudah untuk membaca dokumen XML menjadi objek yang dapat Anda akses seperti contoh kelas lainnya.
sumber
Hanya menunjukkan masalah potensial dengan database file datar dengan jenis sistem ini:
... dll
Masalahnya adalah bahwa data sel berisi "|" atau "\ n" maka data akan hilang. Terkadang akan lebih mudah untuk memisahkan dengan kombinasi huruf yang tidak akan digunakan kebanyakan orang.
Sebagai contoh:
Pembagi kolom:
#$% (Shift+345)
Pembagi baris:
^&* (Shift+678)
File teks:
test data#$%blah blah#$%^&*new row#$%new row data 2
Kemudian gunakan:
explode("#$%", $data); use foreach, the explode again to separate columns
Atau apa pun di sepanjang garis ini. Selain itu, saya dapat menambahkan bahwa database file datar baik untuk sistem dengan jumlah data yang kecil (yaitu kurang dari 20 baris), tetapi menjadi memori besar untuk database yang lebih besar.
sumber