タグ

schemaに関するsh19910711のブックマーク (303)

  • 3Dモデルの配信サーバーでRustとZstandardを採用して数倍のパフォーマンス向上を実現した - pixiv inside

    はじめに こんにちは、VRoid部所属のエンジニアのyueです。 この度VRoid Hubで3Dモデルの配信サーバーの見直しを行い、技術選定から始めRustとZstandard (zstd)を採用した実装に切り替えました。 結論から見るに従来のNode.js製サーバーと比べて以下のことを実現しました。 最大のレスポンス時間が 1.5 ~ 2.5s から 300 ~ 400msまで低下 平均のレスポンス時間が 700 ~ 800ms から 150 ~ 200msまで低下 サーバーのCPU使用率が ~ 50% から ~ 10%まで低下 docker image のサイズが ~ 346mb から ~ 21mb程度まで削減 配信されるファイルサイズが平均 10 ~ 20% 軽量化されました レスポンス時間 CPU使用量 (上からAVG(MAX), AVG, AVG(MIN)) メモリー使用量に関し

    3Dモデルの配信サーバーでRustとZstandardを採用して数倍のパフォーマンス向上を実現した - pixiv inside
    sh19910711
    sh19910711 2025/08/11
    2024 / "zlib: 近年パフォーマンス改善を目指したzlib-ng やcloudflare/zlib などのフォーク / LinuxのFedora distroも最近標準zlibからzlib-ng に置き換える動き"
  • zodを用いた条件分岐バリデーションを実装してみる

    はじめに 1ヶ月後にモンスターハンターになる、ノベルワークスのりょうちん(ryotech34)です。 今回は、TypeScript向けに設計されたスキーマ宣言やバリデーションを助けてくれるライブラリである、zodを使用して条件分岐バリデーションを実装した際の備忘録です。 ドメインモデルとzodを組み合わせた実装方法として、下記の記事を参考にさせていただきました。ぜひ確認してみてください。 対象読者 zodに触れているもしくはこれから触ろうと思っている方 話さないこと zodの基的な記法 題 テーマ toB向けのサービスがあり、組織単位でベーシック、プロ、エンタープライズという3つのプランで契約できるとします。 そこでは、プランごとに毎月使用できるクレジットが制限されており、クレジットが制限値を超えると当該月では使用できないようにするという想定です。 やりたいこと 今回はプランが変更され

    zodを用いた条件分岐バリデーションを実装してみる
    sh19910711
    sh19910711 2025/08/03
    "プランが変更された場合、プランのタイプに合わせてスキーマまるごと変更を行い、不整合があれば型にしたがってエラーを吐かせたい / 最初こそ新しいzodの概念に揉まれて苦労したものの、拡張性があり便利"
  • DBスキーマを駆動にした開発のためのライブラリ調査 | フューチャー技術ブログ

    はじめにGoでデータベースを扱う場合、Gorm, Gorp, sqlx といった O/Rマッパ がよく使われます。多くの場合は構造体のフィールドとデータベースのカラム名のマッピングをするタグ付きの構造体を実装します。例えば Gorm を用いて users テーブルにアクセスする場合、以下のような構造体が一例として考えられます。 model_user.gotype User struct { UserID string `gorm:"column:user_id;primary_key"` UserName string `gorm:"column:user_name"` } func (u *User) TableName() string { return "users" } Gorm や Xorm といった O/Rマッパ を用いる場合、スキーマから構造体を生成できず、構造体の生成が面倒

    DBスキーマを駆動にした開発のためのライブラリ調査 | フューチャー技術ブログ
    sh19910711
    sh19910711 2025/08/02
    2020 / "xo: O/Rマッパ を目指したライブラリではなく、静的に型付けされた Go らしいコード + 任意のクエリをもとに構造体を生成 / クエリを扱う関数やメソッドが扱う型を明示していて扱いやすい"
  • Rustのflate2でgzipファイルをデコードするときはMultiGzDecoderを使おう - Qiita

    1. はじめに Rustのflate2でgzipファイルをデコードして読み込む時には、GzDecoderではなくMultiGzDecoderを使おうという記事。 gzipを開くコードとgzipの構造のざっくりした説明を記事で共有しておく。 Rustのバージョンは1.79.0。 flate2のドキュメントのイントロのそれぞれのstructのページに、 GzDecoderはファイル内の最初のmemberのみ読み込む MultiGzDecoderはファイル内の全てのmemberを読み込む 的なことが書かれていたが、memberが何かわかっておらず、GzDecoderで複数memberを含むgzipファイルをデコードしようとして、失敗していた。(恥ずかしい、、) そもそもgzipファイルを扱うのにその構造をさっぱりわかっていない、というのが不味かったように思う。調べたついでに記事にした。 2. サ

    Rustのflate2でgzipファイルをデコードするときはMultiGzDecoderを使おう - Qiita
    sh19910711
    sh19910711 2025/07/28
    2024 / "MultiGzDecoderはファイル内の全てのmemberを読み込む / そもそもgzipファイルを扱うのにその構造をさっぱりわかっていない、というのが不味かった / RFC 1952を読むのが一番早い"
  • 型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request

    TSKaigi Kansai 2024 https://kansai.tskaigi.org/talks/euxn23

    型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
    sh19910711
    sh19910711 2025/07/28
    2024 / "誰がOpenAPIを書くか(=API仕様を決めるか)に応じて選択 / みんなで書くなら実装ベースじゃない方が議論もしやすい / TypeSpec: TypeScript/C#風味のDSLでOpenAPI Schemaを書ける"
  • R×Snowflake×ADBCで10万行/秒のデータ処理を実現 - Apache Arrow列指向の威力

    データエンジニアのkoreedaです。 先日、SnowflakeでDuckDBとArrowフォーマットの活用についてのMedium記事を読んでいました。 ADBCは、Apache Arrowの列指向フォーマットを活用した次世代のデータベース接続インターフェースです。従来の接続方式とは異なり、列形式のままネットワーク転送され、変換コストが発生せず高速にデータを扱うことができます。列指向データベースと列指向フォーマットの普及により、この技術的優位性はますます重要になっています。 Cut Costs by Querying Snowflake Tables in DuckDB with Apache Arrow より引用 DuckDBのベンチマークによれば、ADBCは従来の接続方式より最大38倍高速にデータ転送できることが示されています。 個人的にRをよく使う機会があり、ローカルのRStudio

    R×Snowflake×ADBCで10万行/秒のデータ処理を実現 - Apache Arrow列指向の威力
    sh19910711
    sh19910711 2025/07/26
    "ADBC: Apache Arrowの列指向フォーマットを活用した次世代のデータベース接続インターフェース / 列形式のままネットワーク転送され、変換コストが発生せず高速"
  • 自動生成の話をしよう 〜 ProtoBuf, Cue, 1次ソースの美学 〜

    Gopher's Gatheringでの発表資料です。 https://connpass.com/event/329963/

    自動生成の話をしよう 〜 ProtoBuf, Cue, 1次ソースの美学 〜
    sh19910711
    sh19910711 2025/07/26
    "protoから環境変数一覧の構造体とそのGetterを生成 / ゲームのデバッグではレベルを100にするとか神コマンド的なのが必要 + UIを含めて自動生成 + デバッグコマンド設定を変数化しRPCで返す"
  • ConnectによるgRPCを超えたスキーマ駆動開発(Golang/TypeScript)

    こんにちは。PortalKeyの植森です。 前回、PortalKeyの主要技術に関してざっくりと解説をしました。 今回は、その中のひとつであるConnectについて掘り下げていきます。 Connectとは? Connectは、Buf Technologies社が開発したRPCフレームワークです。Protocol Buffersによって通信を定義し、効率的なサーバー/クライアント間通信を実現します。 まずはConnectの特徴について解説していきます。 Production-grade simplicity: 番運用のシンプルさ Connectは番運用でのシンプルさを特徴の1つとしています。 gRPCは通信するためにgRPCクライアントや grpcurl のようなツールを使わなければ通信することが困難であったり、Webから利用する場合 gRPC-Web を使う必要がありそのために Env

    ConnectによるgRPCを超えたスキーマ駆動開発(Golang/TypeScript)
    sh19910711
    sh19910711 2025/07/26
    "Protocol Buffersを利用した型安全かつスピード感のある開発をサポート / 標準を大事にしていることで、独自仕様に悩まされず今まで培った経験や技術をきっちりと活かすことができる"
  • Clojureで巨大なZIPファイル/CSVファイルを処理した話 - Uzabase for Engineers

    SaaS Product Team(以下Product Team)のあやぴーです。 Product Teamの開発しているプロダクトでは「企業に関する大量データ」というものを扱う機会があります。特に様々な形式でデータパートナーから受領するため、一筋縄でいかないことが多々あります。今回はその中でも巨大なZIPファイルの中に大量のCSV(ライクな)ファイルをClojureでいい感じに処理するために苦戦した話を書いていこうと思います。 前提 最初のアプローチ OutOfMemoryErrorとの闘い 実行時間との闘い CSVの読み込み リフレクションの抑制 まとめ 前提 まずはZIPファイルについて説明します。 毎月新しいファイルが100程度配信されている ZIPファイルは大きいもので2GB、小さいもので1MB程度 ZIPファイルの中には大量のCSV形式(区切り文字は|)のテキストファイルが含ま

    Clojureで巨大なZIPファイル/CSVファイルを処理した話 - Uzabase for Engineers
    sh19910711
    sh19910711 2025/07/20
    2024 / "遅延シーケンスにすることによりオーバーヘッドが余計に増えることになりますが、今回のように巨大なデータを扱う場合はメモリを逼迫することがなくなる"
  • Parquetの圧縮方式による性能比較

    おはようございます。ログラスの龍島(@hryushm)です。最近Parquetの発音について考える毎日を過ごしています。パーケット、パーキー、パーケ、パルケ......。 Parquetは複数の圧縮方式をサポートしています。データ分析処理を最適化するために何を選ぶべきか、簡単な実験を通じて考えてみます。 Parquetファイルの生成やクエリにはPolarsを利用します。 Parquetで利用可能な圧縮方式は公式のドキュメントに記載されています。Polarsのドキュメントでは下記のように紹介されています。 Choose “zstd” for good compression performance. Choose “lz4” for fast compression/decompression. Choose “snappy” for more backwards compatibility

    Parquetの圧縮方式による性能比較
    sh19910711
    sh19910711 2025/07/20
    2024 / "圧縮率を高めたければZstandard、速度重視ならLZ4、互換性が必要ならSnappy / Parquetのドキュメントの記載によると、LZ4とつくものにはLZ4とLZ4_RAWの2種類があり、LZ4は非推奨"
  • 高速な仮説検証を支えていくHasuraの導入 - enechain Tech Blog

    はじめに eScanチームの平田です。 eScanは日の電力事業に特化したリスク管理サービス(ETRMシステム)です。2022年から開発を始め、お陰様で今では徐々に導入いただける社数も増えてきています。まだまだ不足している機能はありますが、すべてのお客様が確実に必要とするであろうETRMの必須機能の実装は概ね終わっており、新規機能追加中心フェーズは終わりつつあります。これからは、よりお客様にとって価値のあるサービスになるような機能強化や改善を中心にする必要があると考えています。 今回は、eScanチームでの事業フェーズの変化に伴う開発プロセスの試行錯誤と、高速な仮説検証の補助として導入を進めているHasuraについてお話します。 フェーズの変化と仮説検証の必要性 「はじめに」に記載したとおり、徐々に新規機能追加中心のフェーズからより顧客への提供価値の最大化を目指すフェーズに差し掛かってい

    高速な仮説検証を支えていくHasuraの導入 - enechain Tech Blog
    sh19910711
    sh19910711 2025/07/05
    2024 / "Hasuraはデータベースから自動的にGraphQLのAPIを提供するツール / ロールベースでテーブル・行・列ごとに権限を管理 + リクエストごとに取得できる行数や集約クエリの許可など、柔軟に権限の設定"
  • GraphQL APIをMCP Serverとして使えるApollo MCP Server

    GraphQL Queryを指定して起動 Apollo MCP ServerはGraphQL QueryがそのままMCPのToolsとして使うことができます。 この記事では、SpaceXの宇宙飛行士やロケット情報が公開されているGraphQL APIを例としてMCP Serverにしてみます。そして、企業情報を取得するQueryとロケットの打ち上げ情報を検索するQueryの二つを用意しました。 企業情報を取得するQuery query FindLaunches( $apoapsis_km: Float $block: Int $cap_serial: String $capsule_reuse: String $core_flight: Int $core_reuse: String $core_serial: String $customer: String $eccentricity:

    GraphQL APIをMCP Serverとして使えるApollo MCP Server
    sh19910711
    sh19910711 2025/07/05
    "Apollo MCP Server: 既存のGraphQL APIをそのままに、特別な開発や大きな変更を加えることなく、MCP Serverとして動かす + GraphQLの設定を渡すだけ"
  • TypeSpec を使い倒してる #kyotojs 22 / Use up TypeSpec

    Kyoto.js 22 https://kyotojs.connpass.com/event/321343/ Lightning Talk

    TypeSpec を使い倒してる #kyotojs 22 / Use up TypeSpec
    sh19910711
    sh19910711 2025/07/05
    2024 / "TypeSpec: TypeScript/C#っぽい風味にAPI Specを記述できるDSL/コンパイラ実装 / プログラミング言語的な作法でコード分割や再利用が可能 / JSON Schemaとしてやprotobufとしての出力"
  • キャディでのApache Iceberg, Trino採用事例 -Apache Iceberg and Trino Usecase in CADDi--

    sh19910711
    sh19910711 2025/06/28
    "Iceberg Catalog選定問題: 将来移行するリスクを飲む前提で、tabulario/iceberg-reset (現在はiceberg-rest-fixture)とRDBMSを採用 + 現時点でも色々な選択肢がある / IcebergのJava APIを使って、Trinoを介さず直接データを書き込む"
  • 構造化ログのユニットテストでassertLogsが効かない理由とStringIOを使った解決策 - Nealle Developer's Blog

    こんにちは。 Nintendo Switch 2 の抽選予選に無事コマを進め続けている、SREチームの高 (@nogtk) です。早く当選してこの大会からドロップアウトしたいものです。 今回は、構造化ログのユニットテストを書いたときのプチハマりと、それを解決した方法についてご紹介したいと思います。 なぜログのテストコードを書いたか 前回のブログで、Django アプリケーションが出力するログを構造化したお話をご紹介致しました。 nealle-dev.hatenablog.com ログを構造化するにあたって、出力されるログのエントリを定義しそれに沿ってログが出力されるような実装を追加しています。その中には Datadog APM への連携するためのトレース・スパン情報の付加したり、structlog の contextvars というモジュールを使ってコンテキストをログエントリに含めたりなど

    構造化ログのユニットテストでassertLogsが効かない理由とStringIOを使った解決策 - Nealle Developer's Blog
    sh19910711
    sh19910711 2025/06/20
    "ログ出力がデグレを起こしていることを人間が発見するのは非常に難しい / 人間の目はJSONを良い感じにパースしてくれませんし、各エントリの差分やメッセージフォーマットの変化に気づくのは容易ではありません"
  • MCPサーバーの受け入れテスト

    Model Context Protocol(MCP) のサーバーは公式がSDKを提供しています. 言語にもよりますがSDKのおかげでMCPサーバーにかかわるコードは1ファイルに収まる程度, 非常に簡単に実装することができます. とはいえ書き捨てのツールのつもりが社内展開されてしまうといったこと, あると思います. そうなってしまうと, 依存関係の更新などのメンテナンスや機能追加が必要になってきます. そのため初めから受け入れテストを実装しておくと安心です. MCPサーバーの受け入れテストは簡単に実装することができます. 単体テストは? MCPサーバー特有の単体テストを考えると, JSONを受け取ってJSONを返す関数のテストとみなすことができます. これは一般的なWebサーバーのアプリケーション層のテストと同様と言ってもよいでしょう. MCPサーバーの単体テストも同じようにできるはずです

    MCPサーバーの受け入れテスト
    sh19910711
    sh19910711 2025/06/14
    "書き捨てのツールのつもりが社内展開されてしまう / @modelcontextprotocol/sdk に含まれる InMemoryTransport はメモリ上で Server と Client の接続を提供"
  • テーブルが200以上あるSaaSでRSCとGraphQLを併用する理由

    アカデミーキャンプ 2025 SuuuuuuMMeR「燃えろ!!ロボコン」 / Academy Camp 2025 SuuuuuuMMeR "Burn the Spirit, Robocon!!" DAY 1

    テーブルが200以上あるSaaSでRSCとGraphQLを併用する理由
    sh19910711
    sh19910711 2025/06/14
    2024 / "RSC: サーバーで実行されるreactコンポーネント / 権限管理をRSCで実行することでPostGraphileのデメリットを補っている / GraphQLとRSCを適材適所に活用し、併用することで快適な開発環境を実現"
  • 複数のAPIエンドポイントをまたぐテストをgo testで実行するための仕組み - Pepabo Tech Portal

    こんにちは。技術技術基盤チームの@k1LoWです。 久しぶりにオンラインで画面越しに会話した弟からLightning Boltというバンドを教えてもらい、うろたえながらもなかなかにハマっています(Apple独自規格のアレではありません)。音源よりも、まずは是非ライブ動画を観てほしいです。 今回は、複数のAPIエンドポイントをまたぐテストを go test で実行するための仕組みについて紹介します。 複数のAPIエンドポイントをまたぐテストを書きたい 現在私はGo言語によるAPIサーバーの開発に参加しています。HTTPでリクエストを受け、データの永続化にはリレーショナルデータベースを使う、よくあるAPIサーバーです。 APIエンドポイントの設計にはOpenAPI Specification v3とそのエコシステムを使用しており、openapi-generator でサーバーとクライアントの

    複数のAPIエンドポイントをまたぐテストをgo testで実行するための仕組み - Pepabo Tech Portal
    sh19910711
    sh19910711 2025/06/14
    2022 / "runn: 複数のステップで構成されるシナリオをYAMLで記述することができ、またHTTP Requestの場合はOpenAPI Specライクに記述 / go testのテストヘルパーとしてシナリオを実行することができる"
  • Apache Arrow の紹介 - GO Tech Blog

    タクシーアプリ『GO』のデータエンジニアをしている牧瀬です。 Apache Arrow という OSS を知り、弊社でも活用できる機会があるのではないかと興味を持ちました。記事では Apache Arrow の概要を紹介します。 概要 Apache Arrow とは、インメモリのカラムナーフォーマット仕様および、それを操作するための各種プログラミング言語用のライブラリ実装です。 Apache Arrow が作られた目的は、大きなデータセットを高速に処理したり、データセットを異なるシステムやプログラミング言語の間で効率的にやりとりするためです。 なぜインメモリ? 一般的なカラムナーフォーマットの多くはストレージに保存する際のフォーマットですが、Apache Arrow はインメモリの仕様も定められています。 これは 1台のマシン上で異なる言語やプロセスの間でデータをやり取りする際、シリアラ

    Apache Arrow の紹介 - GO Tech Blog
    sh19910711
    sh19910711 2025/06/11
    2023 / "PyArrow: pandas で言えば Series にあたるものが Array/ChunkedArray、DataFrame にあたるものが RecordBatch/Table + immutable なデータ型"
  • hypothesis+panderaで始める、データフレームに対するProperty Based Testing - Sansan Tech Blog

    技術部 R&D研究員の前嶋です。梅雨の季節ですが、少しでも快適に過ごせるようにOnのCloud 5 wpを購入しました。水に強くて軽快な履き心地で最高ですね。(追記:この記事の公開作業をしている間に梅雨が終わってしまいました) 今回は、データフレームのテストについての記事です。 データフレームのテストをどう書くか データが中心となるサービスのネックになるのが テストをどう書くか です。というのも、データフレームは行×列の構造になっているため、入力あるいは出力値がデータフレームになるような関数が多いプログラムでは、テストケースを書くのが非常に面倒です。仕様の変更があった場合、それぞれのテスト用の疑似データに修正を加えることを考えると、より簡潔にデータフレームのバリデーションをする方法が欲しいところです。実は、データフレームのテストはProperty Based Testingという考え方と

    hypothesis+panderaで始める、データフレームに対するProperty Based Testing - Sansan Tech Blog
    sh19910711
    sh19910711 2025/06/11
    2022 / "データフレームのテスト / Property Based Testing(PBT) は、Haskellの QuickCheck で導入された概念だと言われ / 契約による設計(Design by Contract, DbC)を実現するテスト手法として、名著『達人プログラマー』でも推奨"