俺流テキストデータベース #3 呼び出しサンプルプログラム

2018年11月19日

テクノロジー プログラミング 学習

データベースを扱う一番重要なポイントは「データの呼び出し」処理にあります。 データを貯める事は設計さえしておけば、その後はそんなに手間がかかりませんが、溜め込んだデータを呼び出す時に、膨大になりすぎたデータからの検索時間が大きくかかって問題になったり、呼び出し側のプログラムのメモリが圧迫されて、システム毎ダウンしてしまったり、 もちろん、しっかりとデータ設計をしておく事も重要ですが、データ呼び出し方で、不可の掛からないシステム、スピードの早いシステムを実現しなければいけません。 基本的にはSQLなどのデータベースシステムによって性能が決まると思っているプログラマーも少なくないようですが、 ORACLEや高額なデータベースシステムという今時の最新バージョンを使う事で性能が担保されると考えているエンジニアを抱えてしまっている会社は、データベースに対して非常に高いコストを支払っているに違いありませんが、必ずしもデータベースは金額と比例する性能ではない事を理解しましょう。 AWSのRDSなども、SQLをそのままクラウド化して便利に使っているユーザーもいるかもしれませんが、結局プログラムでのメモリ管理やスピード高速化などは、きちんと理論を理解して行わなければいけません。 サーバーダウンしてデータベースの責任にしているエンジニアは、地震のプログラム見直しをするステッップアップをしてみる事をお勧めします。 今回は、そんなデータベースの読み込みに関してテキストデータベースのデータ呼び出し方を学ぶ事で、SQLなどの仕組みやスペックアップ方法なども理解できてしまう事を目的にしています。

データ呼び出しサンプルプログラム

<?php namespace textDatabase; /** * 保存したデータを読み込む */ class dataRead{ // strstring convert public static function stringEncode($string){ $string = str_replace("&" , "&#38;" , $string); $string = str_replace("," , "&#44;" , $string); return $string; } public static function stringDecode($string){ $string = str_replace("&#44;" , "," , $string); $string = str_replace("&#38;" , "&" , $string); return $string; } public static function arrayDecode($arr){ foreach($arr as $key => $value){ $arr[$key] = self::stringDecode($value); } return $arr; } // csv public static function read_csv($filename , $name){ $result = array(); $datas = explode("\n" , file_get_contents($filename.".csv")); for($i=0,$c=count($datas); $i<$c; $i++){ if(!$datas[$i]){continue;} $cells = explode("," , $datas[$i]); $cells = self::arrayDecode($cells); if($cells[0] === $name){ array_push($result , $cells); } } return $result; } // json public static function read_json($filename , $name){ $result = array(); $datas = json_decode(file_get_contents($filename.".json") , true); for($i=0,$c=count($datas); $i<$c; $i++){ if($datas[$i]["name"] === $name){ array_push($result , $datas[$i]); } } return $result; } // json multi public static function read_json_multi($filename , $name){ $result = array(); $datas = explode("\n" , file_get_contents($filename.".multi.json")); $flg = array(); for($i=count($datas)-1; $i>=0; $i--){ if(!$datas[$i]){continue;} $cells = json_decode($datas[$i] , true); $cells = self::arrayDecode($cells); if(isset($flg[$cells["name"]])){continue;} $flg[$cells["name"]] = true; if($cells["name"] === $name){ array_push($result , $cells); } } return $result; } } // test-read $res1 = \textDatabase\dataRead::read_csv("data" , "apple"); $res2 = \textDatabase\dataRead::read_json("data" , "apple"); $res3 = \textDatabase\dataRead::read_json_multi("data" , "apple"); print_r($res1); print_r($res2); print_r($res3); exit("finish !"); $ php read.php Array ( [0] => Array ( [0] => apple [1] => 10 [2] => 1,200 [3] => ) ) Array ( [0] => Array ( [name] => apple [count] => 10 [price] => 1,200 ) ) Array ( [0] => Array ( [name] => apple [count] => 10 [price] => 1,200 ) ) finish ! 非常にシンプルなコードなのですが、これは単純なやり方で書かれています。 データの容量が大きくなるとその分スピードが遅くなってくるので、次回はここからスピードアップさせるいくつかの方法をお伝えします。 この辺からtext-Databaseの真骨頂になってきますのでお楽しみに。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。