忍者ブログ

カウンター

プロモーション

カレンダー

03 2024/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+

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


  • 2024/04/26 21:15

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


  • 2014/09/27 12:15

コメント一覧

  • お名前
  • Email

  • コメント

  • Vodafone絵文字 i-mode絵文字 Ezweb絵文字
  • パスワード
[PR]