Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
NoSQLデータモデリング技法.markdown #NoSQLデータモデリング技法 原文:NoSQL Data Modeling Techniques « Highly Scalable Blog I translated this article for study. contact matope[dot]ono[gmail] if any problem. NoSQLデータベースはスケーラビリティ、パフォーマンス、一貫性といった様々な非機能要件から比較される。NoSQLのこの側面は実践と理論の両面からよく研究されている。ある種の非機能特性はNoSQLを利用する主な動機であり、NoSQLシステムによく適用されるCAP定理がそうであるように分散システムの基本的原則だからだ。一方で、NoSQLデータモデリングはあまり研究されておらず、リレーショナルデータベースに見られるようなシステマティック
2020-08-21OpenAPI や Protocol Buffers のおかげで開発がかなり捗っている話こんにちは、インキュベーション本部エンジニアの加藤です。 主に CLINICS アプリの開発を担当しています。 はじめにCLINICS アプリの開発では OpenAPI や gRPC を利用しています。 OpenAPI と gRPC の間には何の関係もないのですが、どちらも API の仕様をスキーマ言語で記述するという点では共通しています。 今回はこの API スキーマが開発にもたらすメリットについて紹介していこうと思います。 API ドキュメントとしてのスキーマ定義既存のコードに機能を追加する際や修正を加える際に気にすることの多い部分は API の仕様ではないかと思います。 「リクエストやレスポンスはどのようなデータなのか」「この値は必須なのか、任意なのか」「データの型は数値なのか
こんにちは。バクラク事業部 Enabling チームの @izumin5210 です。最近「HUNTER×HUNTER」の既刊を全部読みました。 この記事はLayerXテックアドカレ2023の9日目の記事です。 前回「1人目データアナリストとしてデータチームに異動しました 」 次回「Slack × Zapier × MiroでKPTでの振り返りをラクにする」 RDB や KVS などのデータ保存先において、データを正規化せずにそのまま保存したいと思うことはありませんか? 8月にリリースされた「バクラク請求書発行」というプロダクトには「柔軟なレイアウトカスタマイズ」機能が搭載されています。リンク先の画面操作イメージを見ていただくと、この機能の雰囲気を理解していただけると思います。この機能が扱うレイアウトデータはまさに「関係の正規化をせずに保存したいデータ」でした。 bakuraku.jp こ
はじめに 概要 Apache Iceberg(アイスバーグ)とは [重要] Icebergの本質はテーブル仕様である Table Spec バージョン Icebergハンズオン Icebergの特徴 同時書き込み時の整合性担保 読み取り一貫性、Time Travelクエリ、Rollback Schema Evolution Hidden Partitioning Hidden Partitioningの種類 時間 truncate[W] bucket[N] Partition Evolution Sort Order Evolution クエリ性能の最適化 ユースケース Icebergのアーキテクチャ Iceberg Catalog Iceberg Catalogの選択肢 metadata layer metadata files manifest lists manifest files
主にバックエンドのエンジニアとしてクックパッドマートの開発に携わっている塩出( @solt9029 )です。 美味しい食材をユーザにお届けするサービスであるクックパッドマートでは、日々街の販売店や地域の生産者が商品の登録を行っています。 商品を登録する際、販売者は消費期限をはじめとする様々な品質保証の情報を正確に入力する必要があります。 しかし、商品の種類や状態に応じて記載するべき品質保証の情報は異なるため、全項目が羅列されるフォームでは正確な入力が困難であり、販売者および商品の審査を行う社内の運用メンバに対して大きな負担をかけていました。 そこで、 JSON Schema を利用して複雑なフォームの出し分けを自動で制御し、またバックエンド側でのバリデーションも行うことが出来る仕組みを導入しました。 その結果、商品の種類や状態を選択するだけで、適切な品質保証の情報が自動的に入力され、必要な
はじめまして。TIG DXユニット 1の亀井です。 はじめに みなさん、Swagger使ってますか? Swaggerや周辺ツールについては 某先輩の記事 にて丁寧に解説されていますので、 本記事では実際にSwaggerのスキーマ定義を設計していく上で取り決めた規約について書いてみたいと思います。 前提私が在籍しているプロジェクトでは、REST APIは golang でフロントエンドを Vue.js + TypeScript で構築しています。 短期間・高品質での構築を実現するためにSwaggerを設計ドキュメントとしてだけではなく、コード自動生成やモックサーバーに活用させることで徹底したスキーマファーストな開発を行ってきました。 というわけで、今回は下記のツールを利用することを前提として規約を作成しています。 go-swagger: Goアプリケーションのハンドラ、リクエスト/レスポンス
import "@typespec/http"; using TypeSpec.Http; model User { id: string; name: string; birthday?: utcDateTime; address: Address; } model Address { street: string; city: string; state: string; zip: string; } @route("/users") interface Users { list(@query limit: int32, @query skip: int32): User[]; create(@body user: User): User; get(@path id: string): User; } 上記のコードをコンパイルすると、以下のような OpenAPI のスキーマが出力されま
プログラミング中、何度も同じような、でも、その都度少しずつ異なるコード(ボイラープレートコードとも呼ばれます)を記述しなければならない場面は多々発生します。 可能ならば、このようなパターン化された単調なコードの記述は省略して、より重要なロジックの実装に集中したいものです。 Web APIの開発においても、毎回のように実装が必要なパターン化された処理は多々あります。 リクエストやレスポンスのデータ(現在、ほとんどがJSON形式)のバリデーションもその代表です。 データ種別ごとに手動でバリデーション処理を記述するのでは無く、データ仕様の定義(データスキーマ)を与えれば、自動的にバリデーションするような仕組みが理想でしょう。 本稿では、そんなバリデータの調査や検証中に見つけた課題についてご紹介したいと思います。 ポリモーフィックパターン まず、以下のようなJSONデータを処理するケースについて考
swaggerとは 古の時代、API仕様書はwordやexcelで表現され、各所に共有されるというのが一般的でした。 ですが近年、API仕様を表現する際にはswaggerを利用するのが最も効率的で、保守性が高く、世間一般で仕様化され、見やすいというのもあり、一般化されてきたのではないのでしょうか 今回はそんなswaggerの書き方について、まずは書くために覚えておきたいポイントを解説していこうかと思います! どう書いてくか swagger editorで書く 公式がWeb上に提供しているツールを利用し、すぐにでもswaggerの執筆が可能となっています! なにをインストールする必要もなく開始1秒で利用できるので、私も重宝してます なお、ページを開くとサンプルAPI仕様がすでにある状態でのスタートとなり、記法の参考などにもなります vscodeで書く 必要なプラグインをインストールし、vsc
概要 先日、PydanticV2 に対応した FastAPI 0.100.0 が正式にリリースされました。 PydanticV2 は大部分を Rust で書き直したことで高速化を実現している他 使い勝手向上のために API が多少変更になっているので、移行作業が必要になる場合があります。 本記事では、V1->V2 への移行のポイントについて紹介します。 速度向上について Rust 化による速度向上も重要なポイントです。 参考までに、私が Pydantic 部分のみで試した際は、5~6 倍高速化されていました。 以下のクラウドカメラの Safie 社のブログで、FastAPI で使用した場合の速度向上について実験されています。 参考リポジトリ FastAPI 0.100.0 に対応した FastAPI のサンプルリポジトリを公開しています。 他にもパッケージ管理の Rye や Linter
[レベル: 中級] schema.org を用いた構造データのバリデーションを検証するツールとして Schema Markup Validator が公開されました。 schema.org 公式ブログでアナウンスが出ています。 構造化データ テスト ツールの後継 構造化データを検証するために次の 2 つのツールを Google は提供しています。 構造化データ テスト ツール (Structured Data Testing Tool; 以下、SDTT) リッチリザルト テスト (Rich Result Test; 以下、RTT) 2020 年 7 月に RTT が正式版になったのにあわせて、SDTT の廃止を Google は決めました。 しかし、RTT は Google がリッチリザルトとしてサポートしている構造化データにしか対応していません。 一方、SDTT は構造化データが正しいか
Released on the Supabase platform today, pg_jsonschema is a Postgres extension which adds JSON Schema validation support for json and jsonb data types. The use-case for JSON validation# Despite Supabase being an SQL shop, even our most zealous relational data model advocates (begrudgingly) recognize some advantages to the document data model. Mainly, if some complex data will always be consumed to
今回は、swaggerを使って開発効率を爆上げしたいあなたに、ちょっと踏み込んだswagger活用術を紹介したいと思います! paths sectionを修正しなければいけない機会を最大限少なくする paths sectionってそもそも指定すべきプロパティが多いので、ちゃんとAPI仕様を作ろうと思うとどうしても見づらくなります 特に、parametersやrequestBody、responsesが同居すると記述のルールが違うので統一感がなく、階層が深くなり見づらいです そんなpathsはやはり最大限シンプルに保つべきというのが運用していて思うことです 以下にpathsを最大限シンプルに記述した例を提示しますので、是非参考にしてみてはいかがでしょうか! openapi: 3.0.3 servers: - url: http://localhost:3000 info: title: te
最近久々に近所のお祭りに行ってきました、屋台の食べ物ではりんご飴が好きな菅野です。 皆さん、普段APIのテストはどのように行っておりますか? 最近は、APIのテスト自動化を行えるようなツールやサービスも増えてきているように思いますが、当社では、OSSのテスティングフレームワークである「Karate」を用いることが多いです。 比較的簡単な構文で直感的にAPIのテストができる点がよいと思います。 しかし、いかに簡単な方法でAPIのテストが記述できるからといっても、APIの数が多いとテストを作成するのは一苦労です。 今回は、そんなKarateのテストスクリプトをChatGPTを活用して作成してみようと思います。 まず、REST-APIの仕様を定義する場合、OpenAPIを利用することが多いのではないか、と思います。 ChatGPTの開発元である「OpenAI」ではないです。自分も書いていて、紛ら
はじめに READYFORのエンジニアリング部に所属している熊谷です。 この記事はREADYFOR Advent Calendar 2020の8日目の記事です。 概要 スキーマー駆動開発でOpenAPI(旧Swagger)を導入し始めたところなのですが、その中で、OpenAPIの運用管理について色々調査・検討していたので、記事として共有させていただきます。 対象読者 以下の方々を対象としています API開発でOpenAPI導入を検討している方。 既にOpenAPIの導入済みの方。 背景 ( 課題感 ) スキーマー駆動開発でOpenAPI(旧Swagger)を採用している企業は多いかと思いますが、OpenAPI導入において最初に感じた課題感として、陥りそうな状況の一つとして、最初に運用方針を決めないまま、多数のメンバーが一つのopenapi.yamlにスキーマー定義を追加・更新していった場合
安全なGraphQL API開発が出来るって本当? FastAPI+GraphQL+テストで安全なAPI開発PythonテストGraphQL型定義FastAPI はじめに この記事はZOZOテクノロジーズ アドベントカレンダー#2 16日目の記事です! TL;DR REST上でGraphQLを使用するメリットを説明 ORMを使用してPostgresを操作 GraphQLで用いられるスキーマ、ミューテーション、クエリについて説明 Grapheneを使用してGraphQLをFastAPI上で使えるようにする Grapheneとpytestを使用してGraphQL APIをテストする なぜREST上でGraphQLを使用するか RESTは、WebAPIを構築するためのデファクトスタンダードです。CRUD操作ごとに複数のエンドポイント(GET、POST、PUT、DELETE)を設計します。これらの
安いRDBといえばPlanetScaleのHobbyプランだったり、D1だったり、古き良きVPSでセルフマネージなんて選択肢もあるが、GCPで完結すると嬉しいだとかホストマシンの面倒を見たく無いだとか、そういう場合もあると思う。 なお今回の構成で本当に激安になるかどうか無料枠で収まるかどうか、などはインスタンス設定やワークロード次第の部分もあるので試算したり予算アラートを設定した方がいい。 また個人でのホビー用途など、データが欠損してもごめんごめんで許される用途での利用に留めておいた方が無難だとは思う。ごめんごめんで許されない場合にはCloud SQLとかへ移行するなり、最初からCloud SQLとかを採用するなりしたほうがいい。 完成品のサンプルコード これはeslint設定やらローカル環境向けのdocker-compose.ymlやらも一式入った、開発環境スターターキットになっている。
Chief Research Officerの西鳥羽 (Jiro Nishitoba (@jnishi) | Twitter) です。 今回はHugging Face TransformersのモデルのONNX runtimeで実行を試してみました。それにより特にCUDAでの実行では2.4倍近い高速化が行えました。 Hugging Face TransformersのモデルのONNX形式への変換方法から、ONNX runtimeでの実行も含めて紹介したいと思います。 ONNXとは ONNX形式への変換 ONNX形式に変換したモデルを用いて推論する ONNX形式のモデルからGPUでの推論 実験 まとめ ONNXとは ONNX とは、機械学習のモデルを表現するOpenなフォーマットです。機械学習を実現するフレームワークは数多くありますが、ONNX形式での出力をサポートしてるものも多数存在 *1
どうも、SupabaseでDevRelをしているタイラーです! SupabaseはPostgreSQLをフル活用したBaaSで、バックエンドを1から構築しなくてもサクッとPostgreSQLを使ってアプリを構築できるサービスです。基本的には各種クライアントライブラリーを介してSupabaseに用意されたエンドポイントをコールしてデータを読み書きする形になるのですが、実はSupabaseはpg_graphqlというPostgreSQLの拡張機能開発していて、それを通じてGraphQLの機能も提供しています。Supabaseが提供しているGraphQLエンドポイントはSupabaseのRLSも使えて、セキュアなアプリが簡単に作れます。 そんなpg_graphqlのv1.0が最近リリースされたこともあって今回はせっかくなのでGraphQLを使って簡単なアプリケーションを作ってみようかなと思いまし
[レベル: 中級] 構造化データ テスト ツールの提供を Google は完全に終了しました。 リッチリザルト テストと Schema Markup Validator の紹介ページにリダイレクト 構造化データを終了する予定であることを 2020 年 7 月に Google は発表しました。 リッチリザルト用のすべての構造化データをリッチリザルト テストがサポートしたことが理由です。 しかしながら、リッチリザルトに使われていない構造化データのチェックにリッチリザルト テストは対応していません。 構造化データ テスト ツールの存続を望む声が多く寄せられました。 そこで、構造化データ テスト ツールの後継として Schema Markup Validator を、schema.org の運用管理のもとに 2021 年 5 月に公開しました。 それでも、Schema Markup Validat
しばらく書いてなかったけどメモ程度に dreddとは dreddはopenapi(swagger)やAPI Blueprintの定義を読み込んでテストを実行してくれる便利なツールです。 例えば localhost:8080 でAPIサーバを動かして のようにすればschema.yamlに定義されたAPIの定義に従ってリクエストを送り、レスポンスが仕様に従っているかテストしてくれます。 が、ログインしてtokenを貰ってそのtokenでアクセスするというようなAPIはそのままではテストできません。 hooksという仕組みを使うと、レスポンスからtokenを取得して以後はそれを使う、といった動作が可能になります。 dredd hooks ドキュメントにある通り、hooksは様々な言語で書くことができますが、とりあえずdreddと同じnode.jsでやってみます。 (なぜかと言うと、docker
Kubernetes マニフェストを書くとき、非常にしばしば複数の環境(典型的には production, staging, development)ごとに一部の設定だけ異なる他はほぼ同一の内容のマニフェストを用意しなければならない、ということがあります。このようなとき、繰り返し部分と差分を分ける手段としては複数の選択肢があります。なかでも、kustomize を使って、ベースとなるマニフェストを用意したうえで各環境に応じた差分を適用するためのパッチをあてる、というのがよく選ばれる選択肢でしょうか。この記事では、繰り返しを避けるという目的を達成するのに、kustomize ではなく Google 開発の設定記述用言語 Jsonnet を使うという選択肢もあるということをご紹介します。 Jsonnet には普通のプログラミング言語にはない独特な機能があり、使いこなすにはコツが必要です。この記
はじめに この資料はデータ検証用ライブラリ Cerberus のドキュメントを抄訳したものです。 コミュニティーで Hands-On を行うときの資料として作成したため、 Cerberus の変更履歴などについては触れていません。 また、ソースコードの例示と実行には、IPython を使っています。 $ ipython Python 3.9.7 | packaged by conda-forge | (default, Sep 29 2021, 19:23:19) Type 'copyright', 'credits' or 'license' for more information IPython 7.28.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: IPython の %load コマンドでソースコー
この記事は何か? フロントエンドとバックエンドをGraphQL APIで連携する場合、スキーマファイル(schema.graphqls)をどうやって連携するか悩んでいました。 色々と試行錯誤して、ベストプラクティスとまでは言えないまでもベタープラクティスに近い解決策に至ったので共有してみます。 構成 バックエンドは Go, Gin, gplgen、 フロントエンドは TypeScript, React, Next.js のSPA構成でそれぞれ別リポジトリで管理しています。 やりたいこと バックエンドとフロントエンドでschema.graphqlsファイルから型を自動生成したい。 ※ schema.graphqlsファイルの管理はバックエンドが主導で行う前提です。 やりたくないこと graphqlsファイルの二重管理。バックエンドの差分を逐一フロントエンドでコピーして追従、というケースだけは
from django.urls import path from drf_spectacular.views import ( SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView, ) urlpatterns = [ path("admin/", admin.site.urls), # 127.0.0.1/8000/api/schema にアクセスするとテキストファイルをダウンロードできます path("api/schema/", SpectacularAPIView.as_view(), name="schema"), # SwaggerUIの設定 # 今回は127.0.0.1/8000/api/docs にアクセスするとSwaggerUIが表示されるよう設定します path( "api/docs/", Sp
Python、R、Juliaそれぞれの強みがあるので組み合わせて使いたい場面がしばしばあるかと思います。コードを直接呼び出す機能もありますが、データ解析の場面ではそこまで密に結合させなくても別々のスクリプトで違うステップを担当すれば十分なことも多いでしょう。たとえばPythonでデータのスクレイピングをして、Juliaでマルチスレッドに解析を回し、Rで統計解析や可視化を行うといったケースは想像しやすいかと思います。 Why Feather? そんなとき、Pythonでpickleで保存するともちろん他のプログラミング言語にデータを持っていくことができない、いっぽうでCSVでの保存は遅かったり読み込み時にパースし直すのが面倒、など微妙にやりづらさを覚えることがあります。今回はそんなワークフロー構築での悩みを解決してくれる Featherフォーマット とその使い方を簡単に紹介します。Feath
[beta] APIシナリオテストとは? 複数のAPIを連鎖的に呼び出し(Chaining Requests)て実行するテストのことです。 例えばユーザーの新規登録後に更新させるケースでレスポンス(ユーザーID)を次のAPIのパラメータとし て引き継ぎながらAPIを呼び出すテスト。 1. ユーザー新規登録(Create User) curl -X 'POST' \ 'https://example.com/api/v3/user' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "username": "newUser", "firstName": "John", "lastName": "James", "email": "[email protected]", "password
サイバーエージェント AI Lab の Human Computer Interaction Team に所属している兵頭です。今回は私が半年ほど蓄積したONNXのチューニングテクニックを全てブログに残したいと思います。皆さんが既にご存知であろう基本的なことから、かなりトリッキーなチューニングまで幅広くご紹介したいと思います。長文になりますがご容赦願います。今回は応用編2です。 8. 各種トリック PyTorchやTensorFlowを経由して生成されたONNXから他のフレームワークへモデルを転用する場合に有効な様々なトリック、ワークアラウンドをご紹介します。あまり真新しい知見ではありませんが、以下でご紹介するようなトリックが記事としてまとまっているものはあまり見かけませんのでご参考になれば幸いです。エンジニアよりもリサーチャーの方々に是非読んでいただきたい内容です。ほとんどの内容が地味で
はじめに 結論は至って単純です。「WASIで定義された標準出力ができる関数(API)をWebAssembly内でimportして使っている」ということです。 もちろんドキュメントを見れば分かることですが……折角なのでコードを辿っていきませんか。 ※WebAssemblyの命令や構文の説明をした後、最終的にはChatGPTの力を借りて締めています。 ※素人学生の備忘録です。温かい目でご覧ください。 WebAssembly WebAssemblyを手打ちしたことのある皆さんならご存知だと思います。 WebAssembly単体でできること少なすぎではと。標準出力もできないので、WebAssembly単体でHello Worldすらできません。 WebAssemblyのDesign Goasには Fast, safe, and portable semantics Efficient and po
TypeSchema TypeSchema is a JSON specification to describe data models. Specification Editor Generator Features An elegant specification optimized for code-generation A portable format to share data models across different programming languages Generate clean and simple to use DTOs Handle advanced concepts like inheritance, polymorphism and generics Use reflection to easily turn any class into a Ty
FlatBuffers was designed around schemas, because when you want maximum performance and data consistency, strong typing is helpful. There are however times when you want to store data that doesn't fit a schema, because you can't know ahead of time what all needs to be stored. For this, FlatBuffers has a dedicated format, called FlexBuffers. This is a binary format that can be used in conjunction wi
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く