ফ্ল্যাট ফাইল ডাটাবেস

পিএইচপিতে ফ্ল্যাট ফাইল ডাটাবেস স্ট্রাকচার তৈরির সর্বোত্তম পদ্ধতি কী? অনেক পরিপক্ক পিএইচপি ফ্ল্যাট ফাইল কাঠামো অনেক আমি অনেক ক্ষেত্রে (আমি যে সময়ে একটি ডাটাবেস ব্যবহার করবে) আমার উদ্দেশ্য জন্য শীর্ষ উপর যে SQL- মত কোয়েরি সিনট্যাক্স, বাস্তবায়ন করার চেষ্টা দেখুন

ভাল কর্মক্ষমতা পেতে একটি আকর্ষণীয় কোড আছে সেখানে একটি ছোট কোড ওভারহেডের সঙ্গে একটি বৈশিষ্ট্য আছে কি এই সমস্যাটি প্রথম স্থানে গ্রহণ করতে চান?

0
যোগ সম্পাদিত
মতামত: 4
ফ্ল্যাট ফাইল ডাটাবেস এখানে একটি প্যাকেজ আছে সেখানে আমি যুক্ত করতে চাই। github.com/tmarois/Filebase আমি জানি এই একটি পুরানো প্রশ্ন, কিন্তু এই প্যাকেজ হল সবচেয়ে সাম্প্রতিক বিল্ড এবং বজায় রাখা, প্লাস বৈশিষ্ট্যগুলি পূর্ণ সবচেয়ে অন্তর্ভুক্ত উপেক্ষিত
যোগ লেখক timothymarois, উৎস

12 উত্তর

আমি বিবেচনা করছি একটি কাঠামো একটি ব্লগিং প্ল্যাটফর্মের জন্য হবে। যেহেতু ডাটা সম্পর্কে যেকোনো সম্ভাব্য দৃশ্য আপনি তারিখ অনুসারে সাজানো হবে, আমি এই কাঠামোর কথা ভাবছি:

প্রতি কন্টেন্ট নোডের জন্য একটি ডিরেক্টরি:

./content/YYYYMMDDHHMMSS/

প্রতিটি নোডের সাবডিরেক্টরিগুলি সহ

/tags  
/authors  
/comments  

পাশাপাশি প্রাক এবং পোস্ট-রেন্ডার কন্টেন্ট এবং অনুরূপ জন্য নোড ডিরেক্টরি সহজ পাঠ্য ফাইল।

এটি একটি সহজ পিএইচপি অনুমতি দেবে glob() কল (এবং সম্ভবত এর বিপরীত ফলাফল অ্যারে) বিষয়বস্তু কাঠামোর মধ্যে ঠিক সম্পর্কে কিছু সম্পর্কে জিজ্ঞাসা করতে:

glob("content/*/tags/funny");  

"মজার" ট্যাগ সব নিবন্ধ সহ পাথ ফিরে হবে

0
যোগ

সেটা সত্য. সিরিয়ালাইজ করা() সেইসাথে ভাল জন্য হতে পারে।

আমি মনে করি একটি টেকসই সিস্টেমের সাথে আসার জন্য কৌতুক জটিলতার সাথে নিজেকে হত্যা ছাড়া ডাটা নোড সূচক কোনো উপায় খুঁজে বের করা হয়

0
যোগ

ভাল, ফ্ল্যাট ডাটাবেসের প্রকৃতি কি? তারা কি বড় বা ছোট? এটা তাদের মধ্যে অ্যারে সঙ্গে সহজ অ্যারে হয়? যদি এর কিছু সহজ বলে ব্যবহারকারীপ্রফফিলস যেমন নির্মিত হয়:

$user = array("name" => "dubayou", 
              "age" => 20,
              "websites" => array("dubayou.com","willwharton.com","codecream.com"),
              "and_one" => "more");

এবং সেই ব্যবহারকারীর জন্য db রেকর্ড সংরক্ষণ বা আপডেট করতে

$dir = "../userdata/";  //make sure to put it bellow what the server can reach.
file_put_contents($dir.$user['name'],serialize($user));

এবং ব্যবহারকারীর জন্য রেকর্ড লোড করা

function &get_user($name){
    return unserialize(file_get_contents("../userdata/".$name));
}

কিন্তু আবার এই বাস্তবায়ন আপনার প্রয়োজন ডেটাবেস অ্যাপ্লিকেশন এবং প্রকৃতির উপর নির্ভর করে।

0
যোগ

আপনি সলিউট বিবেচনা করতে পারেন। এটি প্রায় সমতল ফ্ল্যাশ হিসাবে সহজ, কিন্তু আপনি জিজ্ঞাস্য জন্য একটি এসকিউএল ইঞ্জিন পেতে পারি। এটি পিএইচপি দিয়ে ভালভাবে কাজ করে

0
যোগ
SQLite ডিফল্টরূপে 5.0 + এ তৈরি করা হয়েছিল, কিন্তু পিএইচপি 5.4+ থেকে ছাড়! (!!!) !!! জুলাই ২01২ সালে আমি এটি লিখতে গেলে, সাকলাইট ডিফল্টভাবে আর আপ টু ডেট সিস্টেমগুলিতে কাজ করবে না। অফিসিয়াল বিবৃতি এখানে
যোগ লেখক Sliq, উৎস
আপনার সার্ভার অ্যাক্সেস আছে যদি SQLite PDO ড্রাইভার ইনস্টল করা খুবই তুচ্ছ। উবুন্টু / ডেবিয়ান ডেভেলপ করার অপেক্ষাকৃত 2 অপারেটিং সিস্টেমে পিপিসি 5-এসকিউএইচটি সার্ভিস apache2 রিস্টার্ট করুন
যোগ লেখক siliconrockstar, উৎস
@ সিলিকের মন্তব্যের প্রতিক্রিয়াতে, "SQLite ছিল ... বিচ্ছিন্ন" শব্দটি সত্যিকারের সত্য: "SQLite" নামক এক্সটেনশনটি বিচ্ছিন্ন হয়েছে এবং "SQLite3" এখন ডিফল্টরূপে সক্ষম করা হয়েছে। php.net/manual/en/sqlite.installation.php "যেহেতু পিএইচপি 5.0 এই এক্সটেনশান পিএইচপি এর সাথে bundled ছিল। পিএইচপি সঙ্গে আরম্ভ, এই এক্সটেনশান শুধুমাত্র PECL মাধ্যমে উপলব্ধ। " php.net/manual/en/sqlite3.installation.php "SQLite3 এক্সটেনশনটি পিএ
যোগ লেখক Paul van Leeuwen, উৎস

IMHO, আপনি কিছু বিকল্প homebrewing এড়াতে চান তাহলে আপনার দুটি অপশন আছে:

  1. SQLite

    If you're familiar with PDO, you can install a PDO driver that supports SQLite. Never used it, but I have used PDO a ton with MySQL. I'm going to give this a shot on a current project.

  2. XML

    Done this many times for relatively small amounts of data. XMLReader is a lightweight, read-forward, cursor-style class. SimpleXML makes it simple to read an xml document into an object that you can access just like any other class instance.

0
যোগ

যদি আপনি একটি মানব-পাঠযোগ্য ফলাফল চান, আপনি এই ধরনের ফাইল ব্যবহার করতে পারেন:

ofaurax|27|male|something|
another|24|unknown||
...

এই ভাবে, আপনার কাছে শুধুমাত্র একটি ফাইল আছে, আপনি এটি (এবং ম্যানুয়াল ফিক্স) সহজেই ডিবাবল করতে পারেন, আপনি পরে ক্ষেত্রগুলি (প্রতিটি লাইনের শেষে) যোগ করতে পারেন এবং পিএইচপি কোড সহজ (প্রত্যেক লাইনের জন্য, বিভাজক অনুসারে |)।

যাইহোক, দুর্বলতাগুলি হল আপনি অনুসন্ধানের জন্য পুরো ফাইলটিকে বিশ্লেষণ করতে চান (যদি আপনার লক্ষ লক্ষ এন্ট্রি থাকে, এটি ঠিক নয়) এবং আপনি ডেটাতে বিভাজকটি পরিচালনা করতে হবে (উদাহরণস্বরূপ, যদি না ডাক হয় WaR | ordz)।

0
যোগ

যদি আপনি একটি তথ্য জমা দেওয়ার জন্য একটি ফ্ল্যাট ফাইল ব্যবহার করতে যাচ্ছেন, তবে এক্সএমএলটি ডেটা গঠন করতে ব্যবহার করুন। পিএইচপি একটি বিল্ট-ইন এক্সএমএল পিডার রয়েছে।

0
যোগ
এবং মানব-পঠনযোগ্যতার xml নিয়ম অনুসরণ করুন বা আপনি ভাল serialization বা json বা কিছু ব্যবহার করতে পারেন।
যোগ লেখক Ben, উৎস

আমার মতে, আপনি অর্থপূর্ণ অর্থ "ফ্ল্যাট ফাইল ডেটাবেস" ব্যবহার করে (এবং আপনি যে উত্তরটি গ্রহণ করেছেন) নিছকই বিষয়গুলি সম্পর্কে সবচেয়ে ভাল উপায় নয় প্রথমত, সিরিয়ালাইজ() এবং unserialize() ব্যবহার করে যদি কেউ ফাইলটিতে প্রবেশ করে এবং সম্পাদনা করে তবে সেগুলি মূল মস্তিষ্কের কারণ হতে পারে (প্রকৃতপক্ষে, এটি আপনার অ্যালব্রিরিউর কোড রাখে "ডাটাবেস" প্রতিটি সময় চালানোর জন্য।)

ব্যক্তিগতভাবে, আমি বলতে চাই - কেন ভবিষ্যতের দিকে তাকান না? আমি আমার নিজের "মালিকানা" ফাইল তৈরি করা হয়েছে কারণ অনেক সমস্যা হয়েছে যে অনেক বার হয়েছে, এবং প্রকল্প একটি ডাটাবেস প্রয়োজন যেখানে একটি বিস্ফোরিত হয়েছে, এবং আমি চিন্তা করছি "আপনি জানেন, আমি ইচ্ছুক আমি শুরু করার জন্য একটি ডাটাবেস জন্য এই লেখা ছিল "- কারণ কোড রিফ্যাক্টরং সময় খুব বেশী সময় এবং প্রচেষ্টা লাগে।

এই থেকে আমি ভবিষ্যতে আমার অ্যাপ্লিকেশন প্রকাশ করা শিখেছি যাতে এটি বড় পায় যখন আমি যান এবং রিফ্যাক্টরিং দিন কাটাতে হবে না এগিয়ে যান উপায়। আমি এটা কিভাবে করবো?

SQLite। এটি একটি ডাটাবেস হিসাবে কাজ করে, এসকিউএল ব্যবহার করে এবং মাইএসকিউএল (যেমন আপনি যদি ডাটাবেস ম্যানিপুলেশনের মত বুনিয়াদি ক্লাস ব্যবহার করেন তবেই পরিবর্তন করা খুবই সহজ)!

প্রকৃতপক্ষে, "গ্রহণযোগ্য উত্তর" এর পদ্ধতির সাথে espescially, এটি আপনার অ্যাপের মেমরির ব্যবহারকে ব্যাপকভাবে কাটাতে পারে (আপনাকে পিএইচপিতে "রেকর্ড" লোড করতে হবে না)

0
যোগ

এখানে আমরা Lilina জন্য ব্যবহার কোড:

<?php
/**
 * Handler for persistent data files
 *
 * @author Ryan McCue 
 * @package Lilina
 * @version 1.0
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 */

/**
 * Handler for persistent data files
 *
 * @package Lilina
 */
class DataHandler {
    /**
     * Directory to store data.
     *
     * @since 1.0
     *
     * @var string
     */
    protected $directory;

    /**
     * Constructor, duh.
     *
     * @since 1.0
     * @uses $directory Holds the data directory, which the constructor sets.
     *
     * @param string $directory 
     */
    public function __construct($directory = null) {
        if ($directory === null)
            $directory = get_data_dir();

        if (substr($directory, -1) != '/')
            $directory .= '/';

        $this->directory = (string) $directory;
    }

    /**
     * Prepares filename and content for saving
     *
     * @since 1.0
     * @uses $directory
     * @uses put()
     *
     * @param string $filename Filename to save to
     * @param string $content Content to save to cache
     */
    public function save($filename, $content) {
        $file = $this->directory . $filename;

        if(!$this->put($file, $content)) {
            trigger_error(get_class($this) . " error: Couldn't write to $file", E_USER_WARNING);
            return false;
        }

        return true;
    }

    /**
     * Saves data to file
     *
     * @since 1.0
     * @uses $directory
     *
     * @param string $file Filename to save to
     * @param string $data Data to save into $file
     */
    protected function put($file, $data, $mode = false) {
        if(file_exists($file) && file_get_contents($file) === $data) {
            touch($file);
            return true;
        }

        if(!$fp = @fopen($file, 'wb')) {
            return false;
        }

        fwrite($fp, $data);
        fclose($fp);

        $this->chmod($file, $mode);
        return true;

    }

    /**
     * Change the file permissions
     *
     * @since 1.0
     *
     * @param string $file Absolute path to file
     * @param integer $mode Octal mode
     */
    protected function chmod($file, $mode = false){
        if(!$mode)
            $mode = 0644;
        return @chmod($file, $mode);
    }

    /**
     * Returns the content of the cached file if it is still valid
     *
     * @since 1.0
     * @uses $directory
     * @uses check() Check if cache file is still valid
     *
     * @param string $id Unique ID for content type, used to distinguish between different caches
     * @return null|string Content of the cached file if valid, otherwise null
     */
    public function load($filename) {
        return $this->get($this->directory . $filename);
    }

    /**
     * Returns the content of the file
     *
     * @since 1.0
     * @uses $directory
     * @uses check() Check if file is valid
     *
     * @param string $id Filename to load data from
     * @return bool|string Content of the file if valid, otherwise null
     */
    protected function get($filename) {
        if(!$this->check($filename))
            return null;

        return file_get_contents($filename);
    }

    /**
     * Check a file for validity
     *
     * Basically just a fancy alias for file_exists(), made primarily to be
     * overriden.
     *
     * @since 1.0
     * @uses $directory
     *
     * @param string $id Unique ID for content type, used to distinguish between different caches
     * @return bool False if the cache doesn't exist or is invalid, otherwise true
     */
    protected function check($filename){
        return file_exists($filename);
    }

    /**
     * Delete a file
     *
     * @param string $filename Unique ID
     */
    public function delete($filename) {
        return unlink($this->directory . $filename);
    }
}

?>

এটি প্রতিটি এন্ট্রি একটি পৃথক ফাইল হিসাবে সঞ্চয় করে, যা আমরা পাওয়া যায় ব্যবহারের জন্য যথেষ্ট দক্ষ (কোন অপ্রয়োজনীয় তথ্য লোড করা হয় এবং এটি সংরক্ষণ করা দ্রুত)।

0
যোগ

আমি একটি ফাইল মধ্যে তথ্য সংরক্ষণ করতে ডিজাইন দুটি সহজ ফাংশন লিখিত আছে আপনি এই ক্ষেত্রে দরকারী যদি আপনি নিজের জন্য বিচার করতে পারেন। পয়েন্ট একটি পিএইচপি ভেরিয়েবল (যদি এটি একটি অ্যারে একটি স্ট্রিং বা একটি বস্তুর হয়) সংরক্ষণ করতে হয় একটি ফাইল।

<?php
function varname(&$var) {
    $oldvalue=$var;
    $var='AAAAB3NzaC1yc2EAAAABIwAAAQEAqytmUAQKMOj24lAjqKJC2Gyqhbhb+DmB9eDDb8+QcFI+QOySUpYDn884rgKB6EAtoFyOZVMA6HlNj0VxMKAGE+sLTJ40rLTcieGRCeHJ/TI37e66OrjxgB+7tngKdvoG5EF9hnoGc4eTMpVUDdpAK3ykqR1FIclgk0whV7cEn/6K4697zgwwb5R2yva/zuTX+xKRqcZvyaF3Ur0Q8T+gvrAX8ktmpE18MjnA5JuGuZFZGFzQbvzCVdN52nu8i003GEFmzp0Ny57pWClKkAy3Q5P5AR2BCUwk8V0iEX3iu7J+b9pv4LRZBQkDujaAtSiAaeG2cjfzL9xIgWPf+J05IQ==';
    foreach($GLOBALS as $var_name => $value) {
        if ($value === 'AAAAB3NzaC1yc2EAAAABIwAAAQEAqytmUAQKMOj24lAjqKJC2Gyqhbhb+DmB9eDDb8+QcFI+QOySUpYDn884rgKB6EAtoFyOZVMA6HlNj0VxMKAGE+sLTJ40rLTcieGRCeHJ/TI37e66OrjxgB+7tngKdvoG5EF9hnoGc4eTMpVUDdpAK3ykqR1FIclgk0whV7cEn/6K4697zgwwb5R2yva/zuTX+xKRqcZvyaF3Ur0Q8T+gvrAX8ktmpE18MjnA5JuGuZFZGFzQbvzCVdN52nu8i003GEFmzp0Ny57pWClKkAy3Q5P5AR2BCUwk8V0iEX3iu7J+b9pv4LRZBQkDujaAtSiAaeG2cjfzL9xIgWPf+J05IQ==')
        {
            $var=$oldvalue;
            return $var_name;
        }
    }
    $var=$oldvalue;
    return false;
}

function putphp(&$var, $file=false)
    {
    $varname=varname($var);
    if(!$file)
    {
        $file=$varname.'.php';
    }
    $pathinfo=pathinfo($file);
    if(file_exists($file))
    {
        if(is_dir($file))
        {
            $file=$pathinfo['dirname'].'/'.$pathinfo['basename'].'/'.$varname.'.php';
        }
    }
    file_put_contents($file,'<?php'."\n\$".$varname.'='.var_export($var, true).";\n");
    return true;
}
0
যোগ
আমি যে আকর্ষণীয় এবং এটি ভাল উপায় পাওয়া যায়, কারণ আমরা শুধু একটি ফাইল ফরম্যাট অ্যারে ডাম্প। আমরা আবার এটি নির্মাণ করতে হবে না, শুধু পড়া। এছাড়াও, ভেরিয়েবল সম্পাদনা করুন এটি একটু সহজ। আমি বড় ডেটা সংরক্ষণ করার জন্য যে ব্যবহার করবো না, তবে ডাটাবেস ছাড়াই প্রোগ্রামের মডিউলগুলি সঞ্চয় করার জন্য আমি এটা কার্যকরীভাবে খুঁজে পাই। ধন্যবাদ.
যোগ লেখক erm3nda, উৎস
এটি একটি স্বীকৃত উত্তর এবং অনেক অতিরিক্ত উত্তরগুলির সঙ্গে একটি চার বছর বয়েসী প্রশ্ন। নতুন প্রশ্নের উপর মনোযোগ কেন্দ্রীভূত করা বিবেচনা না করলে এখানে উত্তর গৃহীত উত্তর স্পষ্টভাবে ভুল বা অপর্যাপ্ত
যোগ লেখক mcknz, উৎস

এই ধরনের সিস্টেমের সাথে একটি ফ্ল্যাট ফাইল ডাটাবেসের সাথে সম্ভাব্য সমস্যাটি ইঙ্গিত করে:

data|some text|more data

row 2 data|bla hbalh|more data

... ইত্যাদি

সমস্যা হল যে সেল ডেটাতে "|" বা "\ n" তারপর ডেটা হারিয়ে যাবে। কখনও কখনও এটি অক্ষর সংমিশ্রণ দ্বারা বিভক্ত করা সহজ হবে যা অধিকাংশ লোক ব্যবহার করবে না।

উদাহরণ স্বরূপ:

Column splitter: #$% (Shift+345)

Row splitter: ^&* (Shift+678)

Text file: test data#$%blah blah#$%^&*new row#$%new row data 2

Then use: explode("#$%", $data); use foreach, the explode again to separate columns

বা এই লাইন বরাবর কিছু। এছাড়াও, আমি ফ্ল্যাট ফাইল ডেটাবেস যোগ করতে পারে ছোট পরিমাণে তথ্য (IE কম 20 সারি) সঙ্গে সিস্টেমের জন্য ভাল, কিন্তু বড় ডাটাবেস জন্য বিশাল মেমরি hogs হয়ে।

0
যোগ
ভাল দিক. এই একটি পদক্ষেপ আরও গ্রহণ, পিএইচপি সত্যিই সহজে JSON serialize করতে পারেন ইনকয়েরি নিষ্পন্ন করা অনেক সহজ তাই আপনি মজার স্ট্রিং সংমিশ্রণ ব্যবহার করতে হবে না যাতে ফাইলটি আরো পাঠযোগ্য।
যোগ লেখক Cypher, উৎস

This one is inspiring as a practical solution:
https://github.com/mhgolkar/FlatFire
It uses multiple strategies to handling data...
[Copied from Readme File]

বিনামূল্যে বা স্ট্রাকচার্ড বা মিশ্র

- STRUCTURED
Regular (table, row, column) format.
[DATABASE]
/   \
TX  TableY
    \_____________________________
    |ROW_0 Colum_0 Colum_1 Colum_2|
    |ROW_1 Colum_0 Colum_1 Colum_2|
    |_____________________________|
- FREE
More creative data storing. You can store data in any structure you want for each (free) element, its similar to storing an array with a unique "Id".
[DATABASE]
/   \
EX  ElementY (ID)
    \________________
    |Field_0 Value_0 |
    |Field_1 Value_1 |
    |Field_2 Value_2 |
    |________________|
recall [ID]: get_free("ElementY") --> array([Field_0]=>Value_0,[Field_1]=>Value_1...
- MIXD (Mixed)
Mixed databases can store both free elements and tables.If you add a table to a free db or a free element to a structured db, flat fire will automatically convert FREE or SRCT to MIXD database.
[DATABASE]
/   \
EX  TY
0
যোগ