FileとDirですべて解決、シンプル・超堅牢なアプリ・システム開発術
「シェルスクリプトでシステム開発」と言われても,「ろくな開発ライブラリーが揃ってないじゃないか!」と不満を口にし,始めから眼中にないという方,多くありませんか?
見くびってはいけません.シェルスクリプトでも十分に開発ができます.でも多くのプログラミング言語が持っているようなライブラリー類に頼るのではありません.少々のUNIXコマンドと,ファイル・ディレクトリーを,頭を使って使いこなし,やりたい処理を実装していくのです.
コンピューター化される前の紙の時代,人々は業務で降りかかる様々な作業をどのようにこなしていたのでしょうか.答えは「書類」です.業務で発生する様々な情報を,まとめ方(フォーマット)を工夫しながらノートや札に記録し,それを机の棚や引き出し,倉庫,掲示板などに整理整頓しつつ保管・参照・更新をしていました.
ということは,突き詰めて考えれば,紙の時代に人々がこなしていた情報管理やタスク管理はみな,書類や札,そして棚,引き出し,倉庫,掲示板等のデータ構造をファイルやディレクトリーに写像すれば実現できるはずなのです.
この理屈に基づき,RDB製品が行っていたデータ管理から,トランザクション処理などのタスク管理をファイル・ディレクトリーでこなすテクニック,さらにはSQL文をUNIXコマンド・シェルスクリプトに置き換える方法を解説した本です.もはや移植性や維持管理で足を引っ張る言語やライブラリー類は要りません.どのOSにも始めから入っているファイルシステムとUNIXコマンドだけで,しがらみから解放されたプログラミングを実現しましょう.
ver. 1.0 版の目次
1.0版では主に様々なSQLの句をUNIXコマンドやシェルスクリプトに翻訳する方法を追記しました.
以下に目次を示します.強調してある項目が1.0版での追加部分です.(7-10章はすべて)
- 第1章 File/Dir データ管理術事始め
- HACK 1.1 まず、何を重要視するかを確認する
- HACK 1.2 見やすさ・分かりやすさを追求する
- HACK 1.3 無理なく速さを追求する
- HACK 1.4 強靭さ"robustness"を追求する
- HACK 1.5 データやディスク容量をケチらない
- HACK 1.6 システムを擬人化し、手作業時代の構造を写像する
- HACK 1.5 File/Dirデータ管理術用コマンドセット"ShellShoccar"のインストール
- 第2章 データ管理のためのファイルの使い方
- HACK 2.1 「列区切りは、半角空白1個以上」と決める
- HACK 2.2 文字列中の半角空白は、"_"(アンダースコア)で表す
- HACK 2.3 改行・タブ等のその他特殊文字はバックスラッシュ記号でエスケープする
- HACK 2.4 NULL値は、"-" や"*" などの記号1 文字で表す
- HACK 2.5 ファイルフォーマットの種類を把握する
- HACK 2.6 SSV形式(広義のfield 形式)
- HACK 2.7 key-value 形式(name 形式)
- HACK 2.8 JSONPath-value形式・XPath-value形式
- HACK 2.9 CSVindex-value 形式
- HACK 2.10 ファイルは、常にソート済の状態での保存を心がける
- HACK 2.11 一時ファイルも必要なら使う
- 第3章 データ管理のためのディレクトリーの使い方
- HACK 3.1 RDBのテーブル1 つ̸= ファイル1 つ
- HACK 3.2 1つのディレクトリー直下のファイル数≦10000
- HACK 3.3 内容更新する1 つのファイルに収める行数≦10000
- 第4章 実は排他制御不要な排他処理
- HACK 4.1 単調増加カウンターは追記リダイレクションで作る
- HACK 4.2 複数プロセスから同一ファイルの内容を更新しない設計にする
- HACK 4.3 ファイル更新の最後にはmvコマンドを使う
- HACK 4.4 小さなファイルをディレクトリーに並べる
- HACK 4.5 加工元データファイルに加工後データを上書かない
- HACK 4.6 その他、アトミックな処理を活用する
- 第5章 排他処理(トランザクション処理)
- HACK 5.1 排他ロックは「lnなどの早い者勝ち」ルールで捌く
- HACK 5.2 共有ロックは、ディレクトリーでメンバー管理する
- HACK 5.3 セマフォ制御は、共有ロックに最大共有数を設けて対応する
- 第6章 非同期キューイング -- 食券方式な食堂の注文管理
- HACK 6.1 キューイングは、食券方式の食堂を真似する
- HACK 6.2 規模や複雑さが増したら、大規模な食堂の仕組みを真似る
- 第7章 SQL to UNIXマイグレーション(1) ― コマンド
- HACK 7.1 SELECTコマンド
- HACK 7.2 INSERTコマンド
- HACK 7.3 UPDATEコマンド
- HACK 7.4 MERGEコマンド
- HACK 7.5 DELETEコマンド
- HACK 7.6 TRUNCATEコマンド
- HACK 7.7 DROPコマンド
- HACK 7.8 CREATE / ALTERコマンド
- 第8章 SQL to UNIXマイグレーション(2) ― 選択の句
- HACK 8.1 FROM句
- HACK 8.2 UNION、UNION ALL句
- HACK 8.3 EXCEPT / MINUS句
- HACK 8.4 INTERSECT句
- HACK 8.5 WHERE句
- HACK 8.6 GROUP BY句
- HACK 8.7 HAVING句
- HACK 8.8 DISTINCT句
- HACK 8.9 [NOT] (LIKE / REGEXP / SIMILAR TO)句
- HACK 8.10 [NOT] BETWEEN句
- HACK 8.11 [NOT] IN句
- HACK 8.12 ANY / SOME句
- HACK 8.13 ALL句
- HACK 8.14 CASE句
- HACK 8.15 LIMIT句
- 第9章 SQL to UNIXマイグレーション(3) ― ソート・結合の句
- HACK 9.1 ORDER BY句
- HACK 9.2 INNER JOIN句
- HACK 9.3 LEFT [OUTER] JOIN / RIGHT [OUTER] JOIN句
- HACK 9.4 FULL [OUTER] JOIN句
- HACK 9.5 CROSS OUTER JOIN句
- 第10章 SQL to UNIXマイグレーション(4) ― 関数
- HACK 10.1 ABS関数
- HACK 10.2 ACOS関数
- HACK 10.3 ASIN関数
- HACK 10.4 ATAN / ATAN2関数
- HACK 10.5 AVG関数
- HACK 10.6 CAST / CONVERT関数(データ型変換)
- HACK 10.7 CEIL / CEILING関数
- HACK 10.8 COALESCE関数
- HACK 10.9 CONCAT関数
- HACK 10.10 CONVERT関数(データ型変換)
- HACK 10.11 CONVERT関数(文字コード変換)
- HACK 10.12 COS関数
- HACK 10.13 CURRENT_DATE / CURRENT_TIME / CURRENT_TIMESTAMP関数
- HACK 10.14 DATEDIFF / DATADIFF_BIG関数
- HACK 10.15 DBMS_RANDOMパッケージ
- HACK 10.16 EOMONTH関数
- HACK 10.17 EXP関数
- HACK 10.18 FLOOR関数
- HACK 10.19 IFNULL関数
- HACK 10.20 INITCAP関数
- HACK 10.21 ISNULL関数
- HACK 10.22 LAST_DAY / EOMONTH関数
- HACK 10.23 LCASE関数
- HACK 10.24 LEN / LENGTH / LENGTHB関数
- HACK 10.25 LEFT関数
- HACK 10.26 LN / LOG / LOG10関数
- HACK 10.27 LOWER関数
- HACK 10.28 LTRIM関数
- HACK 10.29 MAX関数
- HACK 10.30 MID / MIDB関数
- HACK 10.31 MIN関数
- HACK 10.32 MOD関数
- HACK 10.33 NOW関数
- HACK 10.34 NVL関数
- HACK 10.35 PERIOD_DIFF関数
- HACK 10.36 RAND / RANDOM関数
- HACK 10.37 REGEXP_REPLACE関数
- HACK 10.38 REPLACE関数
- HACK 10.39 RIGHT関数
- HACK 10.40 ROUND関数
- HACK 10.41 RTRIM関数
- HACK 10.42 SIN関数
- HACK 10.43 SQR / SQRT関数
- HACK 10.44 SUBSTR / SUBSTRING / SUBSTRB関数
- HACK 10.45 SUM関数
- HACK 10.46 TAN関数
- HACK 10.47 TIMEDIFF / TIMESTAMPDIFF関数
- HACK 10.48 TRIM関数
- HACK 10.49 TO_*関数(データ型変換)
- HACK 10.50 UCASE関数
- HACK 10.51 UPPER関数
▲トップに戻る |