ورود

View Full Version : بحث درباره دیتابیس و فایل



i love you php
یک شنبه 11 بهمن 1394, 15:04 عصر
با سلام؛
دوستان ؛ سوالی منو خیلی درگیر کرده ...
چگونه کلاسی بنویسم که قدرت یک دیتابیس معمولی را حداقل داشته باشد .
من چندین بار روی آن کار کردم اما سرعت بسیار بد ؛ 20000 تا که فایل محتوا داشتم 15 ثانیه برای بروز کردن آدرس دیتابیس وقت میگرفت :) .
مشکلات من ، تنها سرعت نبود ؛ جستجو , حذف و... بخشی از مشکلات بود ...

کلاسهایی که نوشته بودم به این شکل عمل میکرد .
فایل را به صورت json در مسیر db/Ym/Ymdhis.db ذخیره میکرد .
سپس آدرس هر فایل در داخل فایل آدرس ذخیره میشد :

db/data-address.db

و به شکل :

13941012092420
13941012092443
13941012092508
.
.
ذخیره ، و هر گاه می خواستم فایلها را نمایش دهم "آخرین پست ها" ؛ count میگرفتم و مثلا از آخر به اول بسته به تنظیم متد کلاسم 10 تا 10 تا نمایش میدادم ، مثلا :)

حالا حساب کنید برای آرشیو شمسی و میلادی من باید db/Ym چجوری ثبت میکردم . که البته یجوری حلش میکردم ...

اما پیچیدگی زیادی در میامد .

حال می دانم می فرمایید که وقتی دیتابیس های قدرتمند و آماده هست چرا با فایل :) منم میگم وقتی ربات آماده برای فروش هست چرا ساخت ربتهای تکراری مثلا مسیر یاب :)

--------------------------------

حال می خواهم در رابطه با دیتابیس و نحوه ی کارکرد آن به زبان ساده و اجرایی نه تئوری با هم تبادل نظر کنیم و ایده بدیم که اگر شما پایگاه داده می ساختید ، آن هم تنها با php چجوری کلاس می نوشتید .

i love you php
یک شنبه 11 بهمن 1394, 15:05 عصر
دوستان ؛ امروز آمدم به تقلید از mysql کلاسم را بهتر نوشتم .
حداقل کل اطلاعات روی یک فایل می باشد .
تمام اطلاعات به صورت json ذخیره و درون یک فایل قرار داده می شود
و در زمان فراخوانی میگیم id = name ( شماره کاربری فلان و نام فلان هر چه ذخیره شده (نام طرف) را بر میگرداند .)

منتها محدودیت بالایی دارد .

مثلا اگر حجم کل اطلاعات در مجموع ؛مثلا 20 فیلد 1 کیلوبایت باشد و 1000 رکورد : برای سلکت کردن پنج فیلد از یک شناسه آی دی > 0.0.8 ثانیه زمان می برد .
همین را اگر روی 30 کیلوبایت بزنم 500 مگ باید محدودیت استفاده از رم را کم کنم و حدودا 3.3 ثانیه حدودا زمان می برد .

حال برای کم حجم کردن اطلاعات و سرعت و کم کردن میزان استفاده از رم باید چه کنم.

البته برای ذخیره :


1
json_encode($data,JSON_UNESCAPED_UNICODE)






قرار دادم تا حجم فایل نصف گردد :)

چطور در mysql حجم های هر جدول ؛ 1 گیگ به 1 گیگ تقسیم بندی می شوند و حدود یک میلیون رکورد را حدودا در 2 ثانیه انتخاب میکنند .
ولی من با روی 28 مگ گیر کردم ....



خواهشاً من را یاری بفرمایید .

i love you php
یک شنبه 11 بهمن 1394, 15:06 عصر
کلاسی که جدیدا برای این موضوع نوشتم




<?php

class dbfile{

public $address;
//------------------------------
function __construct(){
header('content-type: application/json; charset=utf-8');
}
//------------------------------
public function ifnotfile($file)
{
$file=explode('/',$file);
$a='';
$count=count($file);
if(strstr(end($file),'.')){$count--;$u=1;}else{$u=0;};
for($i=0;$i<$count;$i++){
$a.=$file[$i].'/';
if(!is_dir($a)){mkdir($a);}
if(!is_file($a.'index.php')){file_put_contents($a. 'index.php','');}
}
if($u==1){if(!is_file($a.$file[$count])){file_put_contents($a.$file[$count],'');}}
return $file;
}
//------------------------------
public function insert_update($id,$content)
{
@$data = json_decode(file_get_contents($this->address), true);
$data[$id] = $content;
file_put_contents($this->address,json_encode($data,JSON_UNESCAPED_UNICODE)) ;
}
//------------------------------
public function select($id,$table)
{
$obj = json_decode(file_get_contents($this->address));
if(isset($obj->{$id}->{$table})){ return $obj->{$id}->{$table};};
}
//------------------------------
public function delete($id)
{
$data = json_decode(file_get_contents($this->address), true);
unset($data[$id]);
file_put_contents($this->address,json_encode($data));
}
//------------------------------
public function select_all()
{
$data = json_decode(file_get_contents($this->address),TRUE);
$count= count($data);
$content=array_keys($data);
for($i=0;$i<$count;$i++){
$content[$i];
}
return $content;
}
//------------------------------
public function count()
{
$data = json_decode(file_get_contents($this->address),TRUE);
return count($data);
}



}

$dbf=new dbfile;
$dbf->address='db.txt';

/*
$content = array(
'name' => 'رضا',
'family' => 'karimi',
'age' => '28',
'date' => '20160131142713'
);
$dbf->insert_update(3,$content);
*/
//echo $dbf->select('3','name');
//$dbf->delete('2');
//print_r($dbf->select_all());
//echo $dbf->count();
?>