1 ポイント 投稿者 GN⁺ 1 시간 전 | 1件のコメント | WhatsAppで共有
  • SQLite は、米国議会図書館 がデータセット向けに推奨する保存形式に含まれている
  • 関連する根拠は、議会図書館の SQLite 形式の説明 とデータ向け推奨形式一覧で確認できる: https://www.loc.gov/preservation/digital/formats/fdd/fdd000461.shtml#local, https://www.loc.gov/preservation/resources/rfs/data.html
  • 2018年5月29日時点で、データセット用の推奨保存形式は SQLite のほか XMLJSONCSV のみ
  • 議会図書館の推奨保存形式とは、保存の専門家がデジタルコンテンツの 存続可能性継続的なアクセス性 を最大化できるとみなす形式
  • 判断基準には、公開性、採用度、透明性、自己文書化、外部依存性、特許の影響、暗号化のような技術的保護メカニズムが含まれる

SQLiteとLoCの推奨保存形式

推奨保存形式の判断基準

  • 推奨保存形式とは、議会図書館の保存専門家が、デジタルコンテンツの 存続可能性継続的なアクセス性 を最大化できると考える形式
  • 議会図書館は、推奨保存形式を選ぶ際に次の基準を考慮する
  • 公開性

    • 技術的完全性を検証するための完全な仕様とツールが存在し、デジタルコンテンツを作成・維持する人々がそれらにアクセスできる度合いを見る
    • 認定された標準化機関の承認よりも、完全な文書化 のほうが重要
  • 採用度

    • 情報資源の主要な作成者、配布者、利用者が、すでにその形式を使用している度合いを見る
    • マスター形式、最終利用者向け配信形式、システム間の交換手段として使われる場合が含まれる
  • 透明性

    • テキスト専用エディタで人間が読めるかどうかのように、基本的なツールでデジタル表現を直接分析できる度合いを見る
  • 自己文書化

    • 自己文書化されたデジタルオブジェクトは、基本的な説明メタデータ、技術メタデータ、その他の管理メタデータを含む
  • 外部依存性

    • 特定のハードウェア、OS、ソフトウェアへのレンダリングや利用の依存度と、将来の技術環境でその依存性に対処する複雑さを見る
  • 特許の影響

    • 特許が、保存機関による当該形式コンテンツの維持能力を妨げる度合いを見る
  • 技術的保護メカニズム

    • 信頼できる保存リポジトリでのコンテンツ保存を妨げる、暗号化のようなメカニズムが実装されているかを見る

1件のコメント

 
GN⁺ 1 시간 전
Hacker Newsのコメント
  • SQLiteにはいつも刺激を受けている。全体としては好きだが、書き込みをしないならかなり大げさな選択でもある
    なのでSQLiteを超えるものではないけれど、もっと 軽量で高速で、zstd圧縮ファイル上でも動く形式を作った。インデックスはとても小さく、SQLiteのようにバイナリやテキストを格納できる
    展開・読み取り・検索を担当するwasm部分は、非圧縮で38KB、gzipならたぶん16KBくらい。SQLiteのwasmとグルーコードの1.2MBと比べると3%のサイズで、検索と読み込みはずっと速い
    私のプログラムは列指向でもなければスプレッドシート管理にも向いていないが、辞書と画像・音声ファイルのアーカイブにはよく合う
    jbig2デコーダも17KBのwasmモジュールに移植していて、ページあたり8KBの白黒スキャンも読めて、しかもまだ十分判読できる
    https://github.com/tnelsond/peakslab
    SQLiteは非常によく設計されていて、PeakSlabはとても単純だ

    • 「SQLiteのwasmとグルーコード1.2MB」と言っていたが、現在のtrunkの標準的な非縮小版は実際には 1.7MB。ドキュメントがJSコードとほぼ同量入っているので、WASMとJSはほぼ半々に分かれている。ただし縮小すれば1.2MBで合っている
      ちなみに私がそのメンテナだ
      現在のtrunk基準の数値は sqlite3.wasm 896745、sqlite3.mjs 816270(ドキュメント込み非縮小)、sqlite3.mjs 431388(ドキュメント抜き非縮小)、sqlite3.mjs 310975(縮小)
    • PeakSlabは知らなかったが、本当にクールで新鮮だ。辞書での性能も非常に高そうで、あとでまた使うためにブックマークしておく価値がある
    • これは昔の Berkeley DB と競合する側に近く見える: https://en.wikipedia.org/wiki/Berkeley_DB
      今見たらもうBSDライセンスですらないし、とにかくSQLiteのせいでほぼ消えたが、基本的なディスクベースのキー・バリューストア用途で使われていた
    • SQLiteもそれなりに単純だし、そのSQL方言の設計原則は気に入っている
      「右結合は向きが逆なだけの左結合だから、そんなものは要らない」みたいな感じだ
      もちろん、もっと単純なものやもっと特化したものは常にあり得る。データベースを使う多くのアプリはSQLiteだけで十分うまく動くだろうし、アプリによってはSQLiteのようなDBの代わりに テキストファイル だけで十分かもしれない
    • より標準的な解決策は cdb だと思う。ただし圧縮データはサポートしていない
      https://cdb.cr.yp.to/ , https://en.wikipedia.org/wiki/Cdb_(software)
  • SQLiteは昔から好きだが、利用を禁止している会社もあると聞いた
    理由は、アプリ用データベースをあまりに簡単に作れてしまうので、アプリケーションの超中核コンポーネントがただのファイルのように見えてしまうからだ。そのファイルはどんな拡張子にもできるし、別のサーバーにコピーすることもできる。その中に 個人識別情報 が入っていても同じだ
    これが社内のアプリの数だけ増えると考えると、かなりのカオスになり得る
    DevOpsやDBAチームは、データベースが誰の目にも明らかな大きく重いデータベースサーバーであることを好む。接続するという行為も明確に見えるし、などなど
    それでもSQLiteはやはり好きだ

    • なら同じ会社が Excel も禁止しているのか気になる。Excelスプレッドシートは思わぬところでシャドーデータベースになることが多い
    • 「何でもミッションクリティカルなデータベースになり得る」という話には、この記事を必読にすべきだ
      https://www.reddit.com/r/sysadmin/comments/eaphr8/a_dropbox_...
    • 「どんな拡張子にもできるファイル」なら マジックナンバー を読めばいい。そもそもファイル拡張子を信用してはいけない
      「別のサーバーにコピーできる」というのはスプレッドシートでも同じだ
      集中化されたデータアクセスが望ましいこと自体は否定しないが、その理屈は十分に洗練されているようには見えない
    • SQLiteにはこんな面白い使い方もある: https://sqlite.org/sqlar.html
    • だからそういう設定ファイルはAppDataやdotfileディレクトリ、またはMacOSの~/Library内の対応する場所に置く
  • 昔は「SQLiteはおもちゃ製品で、本番データには信頼できない」と思っていたが、今では「ほぼ何にでもSQLiteを使おう」という側に変わった
    単一ライター・複数リーダー のパターンに合わせられるなら、SQLiteはとても良い。正しい設定さえ使えばデータを失わないし、その設定も1分ほど検索すれば分かる
    最近の自分のアプリの大半は、単なるGoバイナリ + SQLite + systemdサービスファイルという組み合わせだ
    まだ一度もデータを失ったことはなく、性能も素晴らしく、ほとんどのアプリには十分だ

    • 単一ライターは、実際にはよく言われるほど大きな問題ではない。今どきの NVMeドライブ はすごいので、最適化したWAL設定なら毎秒5,000書き込みは簡単に出る。大半のアプリには夢のような数字だ
      しかも普通のVPSで、バッチライターパターンを使って毎秒18万書き込みもやったことがある
    • バックエンドノードを複数使っているのか気になる。もしそうなら、異なるノードから SQLiteファイル にどうアクセスしているのかも知りたい
  • 「この記事を書いている時点(2018-05-29)…」とあるので、ほぼ8年前の話だ。それでも今まで知らなかったので不満ではなく、むしろ投稿してくれてありがたい寄りだ
    数学脳が一瞬バグって6年だと勘違いしていた

    • 今は2026年だから 8年前
    • 読みながらデジャヴを感じた
  • 2026年の推奨保存形式: https://www.loc.gov/preservation/resources/rfs/data.html

    • データを保存する際に 300〜500年後 まで見据え、あらゆる革新や基本的な技術の老朽化に耐えさせようとするなら、長期的な思考が本当に必要になる
      最も長く生き残った紙媒体は何だろう?
    • 推奨基準はかなり緩く見える。XLS が「preferred」に入っている
  • 公共部門のデータ保存において、SQLiteは最良の選択肢の1つかもしれない
    仕様が公開されており、広く採用され、今後も読める可能性が高い
    特定のOSやサービスへの依存が小さく、特許リスク も低い
    長期的な持続性という観点では、特定の企業やサービスに依存しないことが非常に重要だ

    • アーキビストは原本に近い形式も好む。SQLiteならCSVでは表現しにくい リレーショナルな関係 をそのまま保持できる
  • SQLiteが好きで共有してくれたのはうれしいが、タイトルの末尾には「(2018)」を付けるべきだと思う
    「この記事を書いている時点(2018-05-29)では、データセット向けに推奨される他の保存形式はXML、JSON、CSVだけだ」と書かれている

    • 参考までに、その後リストには形式がかなり追加された
      preferred formatsとしては、データが完全で詳細と精度を維持している限り、ネイティブ形式やバイナリ形式よりもプラットフォーム非依存の文字ベース形式が優先される。十分に開発され広く採用された事実上の市場標準も含まれる
      たとえば、公開された検証ツールがあるよく知られたスキーマベース形式、TSV・CSV・固定長のような行指向形式、.db・.db3・.sqlite・.sqlite3 のようなプラットフォーム非依存のオープン形式がある
      また、特定職種での事実上の標準、あるいは複数ツールが対応する独自形式も含まれる。たとえばExcel .xls/.xlsx や Shapefile のようなものだ
      文字エンコーディングは UTF-8、BOM付きUTF-16、US-ASCII、ISO 8859-1、その他の名前付きエンコーディングの順で好まれる
      acceptable formatsとしては、データについては専門コミュニティや政府機関が標準として承認した非独占的で公開文書化された形式(CDF、HDFなど)、利用可能なスキーマを持つテキストベースのデータ形式がある
      束ねたり転送したりする用途では、暗号化・パスワード・その他の保護機構のない ZIP、RAR、tar、7z が許容される
      https://www.loc.gov/preservation/resources/rfs/data.html
  • ちょうど昨日も、HNのトップでSQLiteの記事を見てからしばらく経ったなと思っていた
    SQLiteの 単純さと速さ が本当に好きで、個人プロジェクトでも仕事のプロジェクトでも使ってきた
    それでも日常業務では結局Excelに行き着く。Excelの方が好きだからではなく、あまりに広く使われているので、技術寄りでないステークホルダーや役員とデータセットを共有して探索するときに 摩擦が最も少ない方法 だからだ

    • これで急に世界観が崩れるとは思わないが、自分には役立ったし同じように役立つかもしれないので、Metabase を見てみる価値はある
      セルフホストできるし、ステークホルダーにデータを消化しやすい形で見せるだけなら本当にシンプルだ。もちろん深くハマりすぎると人生のあらゆる決断を後悔するかもしれないが、自分はそうならないよう自制している
      https://www.metabase.com/
    • SQLiteが動くのにテキストパースへ依存している点がずっと気に入らなかった。なぜクエリをテキストで書かなければならず、プログラムロジック として表現してはいけないのか分からない
      このせいでリレーショナルデータベースを一度も使ったことがない。嫌いだからだ。純粋な構造化データより性能が良くなり得ることは分かっているが、SQLと、SQLという発想そのものが嫌いで、書いたり学んだり、それに依存するシステムを使ったりしたくない
      PHPレベルで間違ったアプローチのように感じる。これを和らげる方法はあるだろうか? SQLのせいでSQLiteを諦め続けたくはないが、どうしても受け入れられない。文字列を組み立てたり、スタックのどこかに文字列パースが入るのが嫌で、とにかく間違っている感じがする
  • SQLiteは驚くほど多才だ。ほんの数週間前にも、SQLite上で プロセス間キュー、ストリーム、pub/sub などを実装する拡張が公開されたばかりだ
    Show HN: Honker – Postgres NOTIFY/LISTEN Semantics for SQLite | 327 points | 94 comments | https://news.ycombinator.com/item?id=47874647
    リアルタイム通知は、SQLiteバックエンドでアプリ全体を実装する際に欠けていた大きなピースの1つだったが、今ではかなり良い解決策がある

  • SQLiteがこのレベルの 機関的なお墨付き を得ているのを見るのはうれしい。単一ファイル形式のおかげで、従来のデータベースダンプよりアーカイブ保存が圧倒的に簡単になる