忍者ブログ

カウンター

プロモーション

カレンダー

03 2019/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

No Image

SQLite でメモリからディスク、ディスクからメモリへのコピーしたい!?

SQLite の調べ物

メモなので、実際に試してませんが、SQLite(3)について調べたメモ説明です。

うーん
SQLite を使う分に
メモリで動かせてもお膳立てで時間がかかるのは困るので
メモリに展開されているレコードデータをディスクなどの記憶溶媒へ保存
または
ディスクに置かれているレコードデータをメモリへ展開する。

このどちらかをPHP 返して1レコードづつやってると
とんでもなく時間がかかるのは明白なので
こんなバカげた事はPHP の命令だけで作りたくない。

というか、PHP の命令だけで作るなんていう事をすると
メモリを使っている意味が・・・無くなるw

なので調べてみた所、
ATTACH(ATTACH DATABASE)
というもので、構文が
これは、
ATTACH (DATABASE) expr AS database-name
でした。

なんでこれに気がついたかというと
英語のサイトで
PHP / SQLite - Copying a table from disk to memory
ここにATTACH を使ってテーブルとして読み取っているっぽいのを見つけたから。

うーん・・・

これでも分かりにくくて
日本語のサイトが無いか調べた

あった、クエリーそのままの表現の説明サイト
ALTER TABLE ~テーブル構造を変更する~

ここのサイトの説明の雰囲気では、接続中のデータベースの一部として
他のデータベースからデータを読み書きできるのが AS らしい。

公式マニュアルの
ATTACH(ATTACH DATABASE)
では、expr の部分がやたら色々変えられるのが図式で分かるが
この場合、日本語のマニュアルでは

基本となる接続中???のデータベース名は選択で記述できるが、
まぁ、それは無視するとしても
追加するファイル名と、データベース名が書かれる様だ

ATTACH 追加するファイル名 AS 追加するデータベース名

こんな感じ

それで追加するファイル名は、パスが含まれる場合があるので、
勿論 '中身' で囲んでパス名+ファイル名にしておけばいいのだと思う。

つまり例えば、PDOなら
$pdo = new PDO('sqlite::memory:');
としてメモリを開き、
c:\temp\sqlite.db
というパス名+ファイル名をメモリ上に置きたい場合


$pdo->exec('ATTACH "c:\temp\sqlite.db" as filedb');
としてまず、物理ディスクにある内容c:\temp\sqlite.db を、filedb として
扱える様に定義(この時点で読み込まれるのかは不明、英文読んでないし
メモリの量のテストmemory_get_usageとかで試してみた訳でない)

そして現在のメモリにテーブルを作って、ディスクの中身に当る
filedb.foo をbar として保存する
$pdo->exec('CREATE TABLE bar AS SELECT * FROM filedb.foo');

また、多分こういうinsertの方法でもいける????
$pdo->exec('insert into bar .table select * from filedb.table');


最後にDROP(要らないならdrop なんだろうけど)でなく、
DETACHで元のテーブルを触る事なく無傷で
テーブルを現在のメモリテーブル操作から切り離す
$pdo->exec('DETACH filedb');

これでいいみたいです???

他にも
2つのSQLiteデータベースを開いて、片方のDBにあるテーブルからもう一方のDBにあ...

とかも同様で参考にしました。

PDO を使った方がいいかなと思いましたが、別にPDO でなくても
クエリーだけの操作ならば問題なくいけるみたいです。

試しては居ませんが、何度も何度も同じ様な疑問を抱き
検索をしているので、この際まとめました。

以上、忘れない為のメモでした。

お粗末<_ _>

拍手[0回]

PR

  • Home
[PR]