ラップトップ用データパワーツール DuckDB が Clojure で登場(2023 年)

2026/08/05 7:09

ラップトップ用データパワーツール DuckDB が Clojure で登場(2023 年)

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Tech.ml.dataset は、高価な分散クラスターを必要とせずに標準的なラップトップ上で直接、効率的かつ大規模なデータ処理を可能にするツール「tmducken」をリリースしました。DuckDB の最新 C インターフェースによるバッチ操作およびゼロコピーパスウェイを活用することで、この統合は開発者がローカルで大量のデータセットを取り扱う方法を根本的に変革します。例えば、このシステムでは、4 億行を含む 50GB の CSV ファイルを約 2 分(具体的には約 1 分 50 秒)で読み込み、自動インデックス作成により 18GB に圧縮することに成功しています。さらに、消費グレードのハードウェア上で約 14 億行を含む後続の結合操作はわずか 2.5 秒で完了し、ゼロコピーパスウェイを使用した特定のリダクションタスクでは最短で約 1 秒(1037 ミリ秒)で処理されました。この機能により、業界が依存していた高価な Apache Spark インフラストラクチャへの依存が解消され、高性能な分析は大型組織だけでなく個人開発者にも利用可能になります。DuckDB はオープンソースであり MIT ライセンスの下で提供されている C++ システムであり、コードベースは約 10 万行あります。この画期的な成果により、複雑なデータ分析が民主化され、以前は主要なデータセンター外では実用的ではなかった機能型プログラミングのワークフローを使用して、企業が行う詳細な結合やローカル調査が可能になりました。

本文

大規模データ処理における DuckDB と tech.ml.dataset (TMD) の統合と活用

1. TMD の現状と課題

機能的なデータサイエンスプラットフォームである「tech.ml.dataset」(TMD)は、以下の特性を持っています。

  • 列優先形式: メモリ内に格納されたデータを効率的に処理する設計です。
  • スケーラビリティ: メモリ収容を超えた場合でも、サンプル単位の操作やサブセットフィルタリングにより利用可能です。
  • 永続化:
    nippy
    arrow
    parquet
    などを使用して、小型から大型までのデータを保存できます。

しかし、以下のような大規模データに対しては現状の TMD だけでは不十分な場合があります。

  • 超大規模データ: 例として、100GB 規模でリレーションシップ属性を持つ
    .csv
    ファイルセットなどが挙げられます。
  • Spark クラスタへの依存回避: 機能的ではない Spark クラスタに巻き込まれるリスクを避けつつ、トランザクション的な相互作用や単純なディスク I/O モデルを維持したいニーズは依然として重要です。
  • 現環境での処理能力: 現地のディスク容量とチップ処理速度は十分であり、クラウドクラスタへの依存は必要ありません。

2. DuckDB の進化と TMD との親和性

リレーショナルデータベースである DuckDB は、TMD の列優先モデルを損なうことなく、以下の利点を提供します。

  • 効率的なデータ導入: JDBC または Postgres を通じた非効率な全行変換手法では、バッチ化されていない API が課題でした。これに対し、DuckDB は解決策を提供しました。
  • 大幅な改良(過去 2 年):
    • C インターフェースが挿入とクエリに対してバッチ化されたシステムを提供しています。
    • これにより、非常に大規模な結合処理が可能になりました。
    • Clojure と TMD を通じて DuckDB の最先端のベクトル化 SQL 実行エンジンにアクセスできるようになっています。

3. 実際の活用事例:50GB データセットの処理

前回の投稿を踏まえ、以下のデータセットを用いて検証を行いました。

  • データ規模: 50GB の
    .csv
    ファイル(3 年分のトランザクションデータ)。
  • 行数: 全行数 4 億行。

データベースへのロードと圧縮

DuckDB にデータをロードするのは容易ですが、処理に時間がかかります。

time duckdb data.ddb 'CREATE TABLE data AS FROM "data.csv";'
# real	1m50.091s
# user	21m42.693s
# sys	0m57.887s
  • 結果: DuckDB は自動的にインデックスを生成し、データを約18GBに圧縮しました。

Clojure 環境からのアクセス

TMD を介して DuckDB にアクセスする手順は以下の通りです。

(require '[tmducken.duckdb :as duckdb])
(require '[tech.v3.dataset :as ds])

(duckdb/initialize!) ; バイナリをロード
(def db (duckdb/open-db "data.ddb"))
(def conn (duckdb/connect db))

; クエリ実行
(time (duckdb/sql->dataset conn "SELECT COUNT(*) AS n FROM data"))

データの結合と分析

別のデータセット(SKU ごとの製品カラー情報)を追加し、データベースに挿入します。

; カラー情報の生成および dataset 化
(def colors-ds 
  (-> (let [colors ["red" "green" "blue" "yellow" "purple" "black" "white"]]
        (->> (for [brand (range 100)
                   style (range 10)
                   item (range 10)]
               (let [sku (format "sku-%s-%s-%s" brand style item)
                     n (rand-int 8)]
                 (for [color (take n (shuffle colors))]
                   {"sku" sku "color" color})))
           (apply concat)))
      (ds/->dataset {:dataset-name "colors"})))

; データベースへ作成・挿入
(duckdb/create-table! conn colors-ds)
(duckdb/insert-dataset! conn colors-ds)

結合クエリの性能検証

4 億件のトランザクションとカラー情報を結合した結果、ノートパソコン上で1.42 億行の結合処理をわずか2.5 秒で完了しました。

(time (duckdb/sql->dataset conn 
         "SELECT COUNT(*) FROM data INNER JOIN colors ON data.sku = colors.sku"))
; Elapsed time: 2486.620275 msecs
; | count_star() |
; |-------------:|
; |   1416737859 |

ビジネスロジックの適用(時系列分析)

SQL では複雑な処理が困難な場合でも、Clojure と TMD を用いて処理できます。ここでは特定 SKU の全トランザクションを時系列順に取得し、簡易的な減算処理を実行しました。

  • 通常クエリパス: 約1.07 秒で完了。
  • ゼロコピー(Zero-Copy)パス:
    {:reduce-type :zero-copy-imm}
    オプションを使用することで、理論上の最低メモリ消費パスを実現し、約1.04 秒で完了しました。
; 通常パス
(time (reduce (fn [eax ds]
                (conj eax (ds/row-count ds)))
              []
              (duckdb/sql->datasets conn 
                                    "SELECT * FROM data WHERE sku='sku-50-5-5' ORDER BY inst")))

; ゼロコピーパス(より低メモリ消費)
(time (let [sql "SELECT * FROM data WHERE sku='sku-50-5-5' ORDER BY inst"
              options {:reduce-type :zero-copy-imm}]
        (reduce (fn [eax zc-ds]
                  (conj eax (ds/row-count zc-ds)))
                []
                (duckdb/sql->datasets conn sql options))))

4. DuckDB の技術的雑記

DuckDB は以下の特徴を持ちます。

  • 自動インデックス管理:
    • 数値データには自動的に minmax インデックス(BRIN)が作成され、クエリ性能が劇的に向上します。
    • 一意またはプライマリーキーを持つ列には ART インデックスが自動作成されます。
    • ユーザーがカテゴリー型列にオプションでインデックスを作成することも可能ですが、ストレージ増大やトランザクション速度低下のトレードオフがあります。
  • 移植性: 標準的な C++11 で記述されており、Mac M-1 などのプラットフォームへの対応も迅速です。
  • コードベース:
    src
    ディレクトリに約10 万行の C++ コードが含まれています。
(base) chrisn@chrisn-lp2:~/dev/cnuernber/duckdb$ cloc src
    Language                     files          code
-------------------------------------------------------------------------------
C++                            831          99454
C/C++ Header                   679          28287
CMake                          101           1541
Markdown                         1              15
-------------------------------------------------------------------------------
SUM:                          1612         129297

5. まとめ

DuckDB と TMD の統合は、以下の価値を提供します。

  • 分散ソリューションへの依存排除: 小型のチームでも高価な Spark クラスタに頼らず、効率的に大規模データを扱えます。
  • 計算ツールの民主化: ノートパソコン上で高品質な計算を実行可能にし、「鈍器のようなツールしか持たないユーザー」がクラスタを求めている状況を解消します。

TechAscent はこの DuckDB 統合機能をサポートし、ご依頼によるカスタマイズも可能です。お問い合わせください。

同じ日のほかのニュース

一覧に戻る →

2026/08/05 7:01

インターポールが警告、アフリカのサイバー犯罪の半分以上を AI が支えデジタル詐欺急増

## 日本語訳: 以下に、元の草案から欠落していた特定の地域的なニュアンスおよび文脈源をより適切に統合しつつ、明瞭さを維持するためにもたらされた改善されたバージョンが示されます。 ## サマリー(改善版) INTERPOL の 2026 アフリカサイバー脅威評価によると、人工知能はアフリカ全体でサイバー犯罪における支配的な力となり、報告された事例の半分以上を原動力とし、2024 年の 1,9200 万ドルから 2025 年には 4,8400 万ドルへと金融損失を増大させています。状況は地域によって多様です:西アフリカおよび南部アフリカは主要な詐欺センターを擁しており(調査対象国の 72% で特定)、中央アフリカではビジネスメールへの侵害やロマンス詐欺の発生率が高く、東アフリカではモバイルマネー詐欺、重要インフラに対するランサムウェア攻撃、合成アイデンティティ犯罪に苦しんでいます。特定のセックス extortion の急増が明らかで、TrendAI がディープフェイクに関連する約 60 万件の事例を検出しています。犯罪者はこれらのツールをソーシャルメディアやモバイルマネーおよびデジタル銀行のようなプラットフォームと組み合わせ、ローンの目的や SIM カード登録のために合成アイデンティティを伴う複雑なスキームを実行するために使用します。しかし、依然として重大な脆弱性が存在しており、特に南部アフリカのように高度なデジタル接続を有する国々において、銀行、通信事業者および法執行機関間の弱い連携は、犯罪者が盗まれた資金を瞬時に国境を超えて移動させることを可能にしています。これらの課題にもかかわらず、対応は増えつつあります;2025 年だけでも、セネガルの新しいオンライン報告プラットフォームを含むサイバー犯罪法の更新を行ったアフリカ諸国は 17 カ国あり、Serengeti 2.0 など共同作戦を促進し、それらは 1,500 件以上の逮捕と 1 億ドル以上の資金の回復をもたらしました。将来のセキュリティは、これらの進化する AI 駆動型の脅威に対処するために、持続的な国際協力および強化された地域準備に依存します。

2026/08/05 1:36

Mistral の Shieldstral:マルチモーダル検閲向けに公開された 3B オープンウェイトモデル

## 日本語訳: Shieldstral は、NVIDIA との Open Secure AI Alliance の初メンバーとして Apache 2.0 ライセンスの下でリリースされた、30 億パラメータを持つオープンウェイトのマルチモーダル安全性分類器です。このモデルは、テキストと画像の安全性評価を単一の適応型インターフェースに統合し、1 トークンから定量化された連続的な安全性スコアを返します。Shieldstral は、コンテンツモデレーションを文脈・厳格度に適応する質問応答タスクとして位置付け、推論時に再トレーニングなしで平易な言語でのポリシーを受け入れる 3 つのコンポーネント(<Instruct>:文脈/厳格度、<Query>:はい/いいえの安全性に関する質問、<Document>:評価対象のテキストまたは画像)を採用しています。Shieldstral は、プロンプト分類、回答モデレーション、拒否検出、毒性検出を単一の適応可能な問題に統合します。性能については、テキスト安全性、拒否検出、ポリシー適応性、マルチモーダルベンチマークにおいて、最大 7 倍のサイズを持つオープンガードモデルと同等かそれ以上の性能を示し、1 つの 16GB の NVIDIA GPU で効率的に動作します。Forge 上でのエンドツーエンドトレーニングでは、多様なラベル形式を持つ現実および合成データを組み合わせたヘテロ지니어ズなデータを使用し、以下の 4 つの主要な課題に取り組んでいます:(1)ヘテロ지니어ズなデータタクソノミーの統合、(2)暗記ではなく判別の学習、(3)画像に基づく安全性の根拠付け、(4)LoRA と SLERP メージを介した補完的なチェックポイントの組み合わせです。データ処理では、ソースごとの厳格度調整(ジャイルブレイク用は厳しく、回答品質用は緩い)を行い、定量化された意思決定境界を学習し、一般的な画像データセットを負例として使用するとともに、視覚・言語再ランク付けにより誤ラベル付けされたペアをフィルタリングしました。今後の計画としては、多言語対応の拡大、長文書に対する堅牢性の向上、およびマルチモーダル安全性機能の幅広化が含まれます。

2026/08/05 0:16

Show HN: 肌の色調を多様化する単純なアルゴリズムと色彩空間

## Japanese Translation: このプロジェクトは、デジタルアートおよびキャラクター作成向けに包摂的なツールを促進することを目的とした、簡略化された RGB ベースの色空間を導入します。これは、現在のシステム(絵文字:5 色、メイクアップパレット:約 50 色など)の限界に対処するものです。本モデルは、生物学的要因(メラニンや血流など)、個々のバイアス、健康状態(例:黄疸など)、および異なるディスプレイ環境によって複雑化している人間の肌トンの莫大な複雑性に対する科学的権威を主張するのではなく、実用的で「十分良好な」エンジニアリングの起点を優先します。手法は、手動での RGB データラベリング、主成分分析(PCA)によるデータセットの変換、Desmos 3D、SymPy、matplotlib、scikit-learn などのツールを用いた球面式のフィッティングを含みます。得られたシステムは、PCA 軸から導かれる 3 つの独立した値を利用し、UI を介して調整されます。ここで、可変的な球半径パラメータは色の変化を制御します;具体的には、この半径を小さくすると、すべての肌トーン(深肤色、白人、冷色調、温色調)において一様に変化が減少し、特定のグループを不均衡に排除することはありません。原点点はニュートラルな曖昧なトーンを表し、マッピングバイアスを特定するために有用です。今後の作業では、専門家ラベラーを用いてモデルを微調整し、黄疸や白斑症などの状態に対する簡略化された表現を取り入れる予定です。本アプローチは科学的でないことを認める一方で、エンジニアリング用途においては依然として非常に機能性を備えていることを認識しています。