SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Downloaden Sie, um offline zu lesen
SQLQL は GraphQL に
とってなんなのか
SQLQL は GraphQL に
とってなんなのか
2019/03/22 RailsDM
@yancya
Powered by Rabbit 2.2.2 and COZMIXNG
@yancya の自己紹介
Rubyist, SQList
全体の構成
基礎、考え方
諸問題の解決
SQLQL プログラミング
事例
はじまり
“SQLQL” でググると出てきます
SQLQL とは
https://somehost/sqlql みたいな URL に SQL
を送信すると、SQL 実行結果の JSON が返って
くるという概念
気をつけたいこと
サーバー側の RDBMS の SQL 処理系は便利な
のでそのまま使いたい
特に PostgreSQL が便利なので使いたい
でも SQLQL で送られてきた SQL で物理的な
テーブルを直接触らせたくはない
外に見せたくないテーブルやカラムがある
誰に見せていいというわけではないレコードがあった
りもする
サンプルアプリケーション
説明のためのアプリケーションがあります
サンプルアプリケーション
サンプルアプリケーションは GitHub のページか
らボタン1つでデプロイ出来ます
試してみてね
サンプルアプリケーションの仕様
ユーザーがコメントを投稿して、他のユーザー
が「いいね」する、よくあるやつ
サンプルアプリのテーブル
サンプルアプリのテーブル
サンプルアプリのテーブル
細かい仕様
鍵付きユーザーという概念がある
自身はユーザー自身にしか見えない
「いいね」は他のユーザーからは誰が「いいね」した
のか分からない
鍵付き投稿という概念がある
投稿したユーザー自身にしか見えない
少し複雑なクエリ
鍵付きユーザーの「いいね」について名前を
「匿名」にして出している
WITH comments AS (
SELECT comments.id, content, users.name AS user_name, comments.created_at
FROM comments JOIN users ON comments.user_id = users.id
), likes AS (
SELECT COALESCE(users.name, '匿名') AS user_name, likes.created_at, comment_id
FROM likes LEFT OUTER JOIN users ON likes.user_id = users.id
)
SELECT comments.id, content, comments.user_name
, JSON_AGG(likes ORDER BY likes.created_at DESC) AS liked_by
FROM comments JOIN likes ON likes.comment_id = comments.id
GROUP BY 1, 2, 3
CTE(Common Table Expressions)
インラインの VIEW
サブクエリに名前を付けて、クエリ中で何度
も使える
既存のデフォルトスキーマ(public)のテーブ
ル名を上書きする事が出来る
さっきのテーブルは本当は public.users とか
public.comments だけど public がデフォルトスキーマ
なので users とか comments でアクセスできる
CTE(Common Table Expressions)
users をシャドウイングしてサブセットのテー
ブルに置き換えている様子
クエリーを発行しているユーザー自身と鍵付きではな
いユーザーのレコードのみ
id, name にしかアクセス出来ない
WITH users AS (
SELECT id, name FROM users WHERE id = ? OR privacy = false
)
SELECT * FROM users
CTE(Common Table Expressions)
comments をシャドウイングしてサブセットの
テーブルに置き換えている様子
自身のと鍵付きではないコメントのレコードのみ
id, name, content, updated_at にしかアクセス出来ない
WITH comments AS (
SELECT id, name, content, updated_at FROM comments
WHERE user_id = ? OR privacy = false
)
SELECT * FROM comments
CTE(Common Table Expressions)
CTE によって予め射影される
CTE(Common Table Expressions)
CTE によって予め射影される
CTE(Common Table Expressions)
CTE によって予め射影される
問題点
Mutations が邪魔
スキーマ修飾、システムカタログテーブルへ
のアクセス
無限ループ
Mutations
INSERT, UPDATE, DELETE, CREATE,
TRUNCATE etc…
DB の状態を変えてしまう操作は一切してほし
くないので、なんとかして殺していく必要が
ある
スキーマ修飾
WITH users AS (
SELECT * FROM users WHERE false
)
SELECT * FROM users
これなら結果が0件になるが
スキーマ修飾
WITH users AS (
SELECT * FROM users WHERE false
)
SELECT * FROM public.users
元のテーブルの全カラムが全件見えてしまう
スキーマ名で修飾すると、大元のテーブルに
アクセス出来てしまうので、スキーマ修飾も
殺さないといけない
システムカタログテーブル
pg で始まるテーブルは見られたくない
pg_user 以外にもめっちゃ沢山ある
SELECT * FROM pg_user
無限ループ
再帰クエリを使うと無限ループを表現できて
しまい、殺意のあるリクエストを送り込まれ
る危険がある
とは言え、再帰クエリが使える方が嬉しいの
で、無限ループだけを殺したい
無限ループ
再帰クエリを使った無限ループの例
n が 1 〜∞まであるテーブルが生成されようとして死ぬ
WITH RECURSIVE r AS (
SELECT 1 AS n UNION ALL
SELECT n + 1 AS n FROM r
)
SELECT * FROM r
問題の解決
Mutations の除外
スキーマ修飾、システムカタログテーブルへ
のアクセス制限
無限ループ対策
Mutations の除外
複数 DB。
なるほど、これだ。Rails 6.0 すごい
複数 DB
Rails 6.0 から、replica 属性のサブのコネク
ションの設定が簡単に書けるようになった
development:
primary:
<<: *default
database: sqlql_development
readonly:
<<: *default
database: sqlql_development
replica: true
replica 属性のコネクション
SQLQL の処理をするときだけ replica 属性の
コネクションを使えば、Mutations っぽい
SQL は Rails が弾いてくれて便利っぽい
ActiveRecord::Base.connected_to(database: :readonly) do
User.first.update(name: 'hoge')
end
#=> ActiveRecord::ReadOnlyError
#=> (Write query attempted while in readonly mode...
と思うじゃん?
CTE の WITH 句は Rails 的にはホワイトリス
トに入ってないっぽい……
ActiveRecord::Base.connected_to(database: :readonly) do
ActiveRecord::Base.connection.execute(
"WITH t AS (SELECT 1 AS n) SELECT * FROM t"
)
end
#=> ActiveRecord::ReadOnlyError
#=> (Write query attempted while in readonly mode...
どういうルールなのか
rails/activerecord/lib/active_record/
connection_adapters/postgresql/
database_statements.rb
便利メソッドで正規表現を生成してるの
READ_QUERY = ActiveRecord::ConnectionAdapters::AbstractAdapter.build_read_query_regexp(
:begin, :commit, :explain, :select, :set, :show, :release, :savepoint, :rollback) # :nodoc:
private_constant :READ_QUERY
def write_query?(sql) # :nodoc:
!READ_QUERY.match?(sql)
end
モンキーパッチすっか?
じゃあ WITH もホワイトリストに入れたろ
def write_query?(sql)
read_query =
ActiveRecord::ConnectionAdapters::AbstractAdapter.build_read_query_regexp(
:begin, :commit, :explain, :select, :set,
:show, :release, :savepoint, :rollback, :with
)
!read_query.match?(sql)
end
やったー
readonly コネクションで WITH が使えるよう
になったぞ
res = ActiveRecord::Base.connected_to(database: :readonly) do
ActiveRecord::Base.connection.execute(
"WITH t AS (SELECT 1 AS n) SELECT * FROM t"
)
end
res.to_a #=> [{"n"=>1}]
本当にそれでいいのか?
そもそも、なんで WITH がホワイトリストに
入っていなかったか考えないと駄目でしょ
WITH は副作用を起こせてしまうのでは?
WITH は副作用を起こせる
この機能、めちゃくちゃ便利なんですけど、
今は邪魔ですね
res = ActiveRecord::Base.connected_to(database: :readonly) do
ActiveRecord::Base.connection.execute(
"WITH t AS (UPDATE users SET name = 'hoge' RETURNING *) SELECT * FROM t"
)
end
res.to_a #=> [{"id"=>1,"name"=>"hoge"},{"id"=>2,"name"=>"hoge"}]
DB ユーザーの権限
しゃーない
ちゃんと、DB レベルで readonly なユーザー
を作るしかない
create user readonlyuser with password 'readonlyuser' NOCREATEDB NOCREATEROLE;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO "readonlyuser";
DB ユーザーの権限
development:
primary:
<<: *default
database: sqlql_development
readonly:
<<: *default
database: sqlql_development
replica: true
username: readonlyuser
password: readonlyuser
DB は最後の砦
これで、副作用のあるクエリは DB が弾いて
くれるようになった
ActiveRecord::Base.connected_to(database: :readonly) do
ActiveRecord::Base.connection.execute(
"WITH t AS (UPDATE users SET book_name = 'hoge' RETURNING *) SELECT * FROM t"
)
end
#=> ActiveRecord::StatementInvalid
#=> (PG::InsufficientPrivilege: ERROR: permission denied for table users
テーブルホワイトリスト
SQL リクエストに含まれるはずのテーブルは
予め決まっている
ホワイトリスト方式にすれば、物理テーブル
やシステムテーブルなどへのアクセスを防げ
る
PgQuery gem
pg_query という gem がある
$ gem install pg_query
PgQuery.parse("select * from t").tables
#=> ["t"]
PgQuery gem
テーブル名をスキーマ名で修飾している SQL
を検知できる
pg_user みたいなシステムカタログテーブル
へのアクセスも検知できる
PgQuery.parse("select * from public.t").tables
#=> ["public.t"]
無限ループ対策
SQLQL の処理をする場合の実行時間に制限を
付ければ、無限には実行されないだろう
development:
primary:
<<: *default
database: sqlql_development
readonly:
<<: *default
database: sqlql_development
replica: true
variables:
statement_timeout: 3000
タイムアウトによる無限ループ対策
まぁまぁ良さそう
ActiveRecord::Base.connected_to(database: :readonly) do
ActiveRecord::Base.connection.execute(<<~SQL)
WITH RECURSIVE r AS (
SELECT 1 AS n UNION ALL
SELECT n + 1 AS n FROM r
)
SELECT * FROM r
SQL
end
#=> ActiveRecord::QueryCanceled
#=> (PG::QueryCanceled: ERROR: canceling statement due to statement timeout)
無限ループ対策
SQL の実行時間を短く制限(3秒とかに)す
れば、CTE を使った無限ループを防げる
generate_series(1, 10000000) みたいな、膨
大な行数を生成する関数の実行も途中で打ち
切れる
とは言え、DOS 攻撃に弱そう……
今後の課題として残る
SQLQL の核となる考え方
インピーダンスミスマッチ
Object から Relation へ
SQLQL プログラミング
インピーダンスミスマッチ
インピーダンスミスマッチ
誤解を恐れず言えば、オブジェクトとリレー
ション(群)との相互変換が大変という話に
思える
これを解決するために OR/M を使って頑張ってるのが
現代
Relation to Object
SQL でリレーションをオブジェクトに
Relation to Object
JSON_AGG 関数や ROW_TO_JSON 関数を
使えば、SQL でババっと JSON を生成できる
WITH users(id, "name") AS (VALUES (1, 'taro'), (2, 'jiro'))
SELECT JSON_AGG(users) AS users FROM users;
-- users
-- ---------------------------
-- [{"id":1,"name":"taro"},{"id":2,"name":"jiro"}]
-- (1 row)
Relation to Object
欲しい JSON の形でスっと出せる
WITH users(id, "name") AS (VALUES (1, 'taro'))
, comments(id, content, user_id) AS (
VALUES(1, 'aaaaaaa', 1), (2, 'bbbbbb', 1))
, t AS (
SELECT users.id, users.name, JSON_AGG(comments) as comments
FROM users JOIN comments ON users.id = comments.user_id GROUP BY 1, 2)
SELECT JSON_AGG(t) AS users FROM t;
-- users
---------------------------------------------------------------------------------
-- [{"id":1,"name":"taro","comments":[{"id":1,"content":"aaaaaaa","user_id":1}, +
-- {"id":2,"content":"bbbbbb","user_id":1}]}]
-- (1 row)
Object to Relation
逆にオブジェクトをリレーションに変換は?
Object to Relation
JSON_TO_RECORD,
JSON_TO_RECORDSET 関数を使う
with users as (
SELECT id, "name", comments
FROM JSON_TO_RECORDSET(
CONCAT('[{"id":1,"name":"taro","comments":',
'[{"id":1,"content":"aaaaaaa","user_id":1}',
',{"id":2,"content":"bbbbbb","user_id":1}]}]')::JSON
) AS t(id integer, "name" text, comments json))
select users.id, users."name", comments.id as comment_id, comments.content
from users, json_to_recordset(users.comments) AS comments(id integer, content text, user_id integer)
-- id | name | comment_id | content
------+------+------------+---------
-- 1 | taro | 1 | aaaaaaa
-- 1 | taro | 2 | bbbbbb
--(2 rows)
SQLQL プログラミング
SQL 処理系の中でプログラミングをすると、
リレーショナル代数計算を手軽に行う事が出
来る
和(UNION)、積(INTERSECT)
差(EXCEPT)、商(一言では言い表せない)
直積(CROSS JOIN)、選択(WHERE)
射影(SELECT)、結合(JOIN)
SQLQL プログラミング
オブジェクトとリレーション、相互に変換出
来るのであれば
オブジェクト界が得意な処理はオブジェクトに変換し
て行う
リレーション界が得意な処理はリレーションに変換し
て行う
RDB に保存したいときも然り
SQLQL プログラミング
オブジェクト界が得意な処理と、リレーショ
ン界が得意な処理とは……
SQL脳から見たRubyという発表 2015/11/08 by yancya
JOIN とか WINDOW 関数の処理をアプリケーション側
で書くのは結構大変
RDB からデータを取ってくるついでに、不得意な処理
も任せてしまいたい
GraphQL の話はどうした
GraphQL App 内で SQLQL を呼び出して実行
認可の層として使えるのではないか
まとめ
SQLQL のサンドボックスは多少マシになった
フロントエンドが持ってるオブジェクトをリ
レーションに変換して API の向こうにある
DB と JOIN して、欲しいデータとして受け取
れたら楽しい
Powered by Rabbit 2.2.2 and COZMIXNG

Weitere ähnliche Inhalte

Was ist angesagt?

明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7Yuichi Sakuraba
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
光のMySQL 5.7
光のMySQL 5.7光のMySQL 5.7
光のMySQL 5.7yoku0825
 
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使うCocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使うMasayuki Nii
 
Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Noriyoshi Shinoda
 
おもにEXcelだけで出来る自動化技術
おもにEXcelだけで出来る自動化技術おもにEXcelだけで出来る自動化技術
おもにEXcelだけで出来る自動化技術Takanobu Mizuta
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityMikiya Okuno
 
Wpfと非同期
Wpfと非同期Wpfと非同期
Wpfと非同期yone64
 
Introduction to cocoa sql mapper
Introduction to cocoa sql mapperIntroduction to cocoa sql mapper
Introduction to cocoa sql mappermavelph
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQLyoku0825
 
Scala EE 7 Essentials
Scala EE 7 EssentialsScala EE 7 Essentials
Scala EE 7 Essentialstnoda
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Androidyo_waka
 
MySQLの全文検索に関するあれやこれや
MySQLの全文検索に関するあれやこれやMySQLの全文検索に関するあれやこれや
MySQLの全文検索に関するあれやこれやyoku0825
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
オープンソースでExcelレポートプログラミング
オープンソースでExcelレポートプログラミングオープンソースでExcelレポートプログラミング
オープンソースでExcelレポートプログラミングSho Okada
 
Windows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMIWindows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMIjunichi anno
 
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうMySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうyoku0825
 
mysqlcasual6-fabric
mysqlcasual6-fabricmysqlcasual6-fabric
mysqlcasual6-fabricdoublemarket
 

Was ist angesagt? (20)

明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
光のMySQL 5.7
光のMySQL 5.7光のMySQL 5.7
光のMySQL 5.7
 
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使うCocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使う
 
Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1
 
おもにEXcelだけで出来る自動化技術
おもにEXcelだけで出来る自動化技術おもにEXcelだけで出来る自動化技術
おもにEXcelだけで出来る自動化技術
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 Security
 
Wpfと非同期
Wpfと非同期Wpfと非同期
Wpfと非同期
 
Introduction to cocoa sql mapper
Introduction to cocoa sql mapperIntroduction to cocoa sql mapper
Introduction to cocoa sql mapper
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQL
 
Scala EE 7 Essentials
Scala EE 7 EssentialsScala EE 7 Essentials
Scala EE 7 Essentials
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Android
 
MySQLの全文検索に関するあれやこれや
MySQLの全文検索に関するあれやこれやMySQLの全文検索に関するあれやこれや
MySQLの全文検索に関するあれやこれや
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
オープンソースでExcelレポートプログラミング
オープンソースでExcelレポートプログラミングオープンソースでExcelレポートプログラミング
オープンソースでExcelレポートプログラミング
 
Windows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMIWindows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMI
 
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうMySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
 
Gossip事始め
Gossip事始めGossip事始め
Gossip事始め
 
mysqlcasual6-fabric
mysqlcasual6-fabricmysqlcasual6-fabric
mysqlcasual6-fabric
 

Ähnlich wie SQLQL は GraphQL にとってなんなのか

Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517akirahiguchi
 
C# Database操作1 接続と切断-
C# Database操作1  接続と切断-C# Database操作1  接続と切断-
C# Database操作1 接続と切断-Hiroki Takahashi
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Ransui Iso
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptYoshifumi Kawai
 
uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoya
uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoyauroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoya
uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoyaKenichi Hoshi
 
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!yoyamasaki
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜Michitoshi Yoshida
 
activerecord-oracle_enhanced-adapterのご紹介
activerecord-oracle_enhanced-adapterのご紹介activerecord-oracle_enhanced-adapterのご紹介
activerecord-oracle_enhanced-adapterのご紹介Kevin Toyoda
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906akirahiguchi
 
Let s database_testing
Let s database_testingLet s database_testing
Let s database_testingYuji Shimada
 
開発者なのに運用で手がいっぱい? そんなあなたに贈る、 クラウド時代に最適な OSS の RDBMS ! Azure Database for MySQL...
開発者なのに運用で手がいっぱい? そんなあなたに贈る、 クラウド時代に最適な OSS の RDBMS ! Azure Database for MySQL...開発者なのに運用で手がいっぱい? そんなあなたに贈る、 クラウド時代に最適な OSS の RDBMS ! Azure Database for MySQL...
開発者なのに運用で手がいっぱい? そんなあなたに贈る、 クラウド時代に最適な OSS の RDBMS ! Azure Database for MySQL...Suguru Ito
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Masayuki Ozawa
 
今更だけどSqLite触ってみたよ
今更だけどSqLite触ってみたよ今更だけどSqLite触ってみたよ
今更だけどSqLite触ってみたよKeisuke Oohata
 
SQL Server コンテナ入門(Docker編)
SQL Server コンテナ入門(Docker編)SQL Server コンテナ入門(Docker編)
SQL Server コンテナ入門(Docker編)Tomoyuki Oota
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料cryks
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用についてLINE Corporation
 

Ähnlich wie SQLQL は GraphQL にとってなんなのか (20)

Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 
C# Database操作1 接続と切断-
C# Database操作1  接続と切断-C# Database操作1  接続と切断-
C# Database操作1 接続と切断-
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
 
Embulk 20150411
Embulk 20150411Embulk 20150411
Embulk 20150411
 
uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoya
uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoyauroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoya
uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoya
 
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
 
activerecord-oracle_enhanced-adapterのご紹介
activerecord-oracle_enhanced-adapterのご紹介activerecord-oracle_enhanced-adapterのご紹介
activerecord-oracle_enhanced-adapterのご紹介
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
Let s database_testing
Let s database_testingLet s database_testing
Let s database_testing
 
開発者なのに運用で手がいっぱい? そんなあなたに贈る、 クラウド時代に最適な OSS の RDBMS ! Azure Database for MySQL...
開発者なのに運用で手がいっぱい? そんなあなたに贈る、 クラウド時代に最適な OSS の RDBMS ! Azure Database for MySQL...開発者なのに運用で手がいっぱい? そんなあなたに贈る、 クラウド時代に最適な OSS の RDBMS ! Azure Database for MySQL...
開発者なのに運用で手がいっぱい? そんなあなたに贈る、 クラウド時代に最適な OSS の RDBMS ! Azure Database for MySQL...
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
 
今更だけどSqLite触ってみたよ
今更だけどSqLite触ってみたよ今更だけどSqLite触ってみたよ
今更だけどSqLite触ってみたよ
 
SQL Server コンテナ入門(Docker編)
SQL Server コンテナ入門(Docker編)SQL Server コンテナ入門(Docker編)
SQL Server コンテナ入門(Docker編)
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用について
 

Mehr von yancya

Opencv by-yancya
Opencv by-yancyaOpencv by-yancya
Opencv by-yancyayancya
 
どう書く日記
どう書く日記どう書く日記
どう書く日記yancya
 
BigQuery の relation 生成
BigQuery の relation 生成BigQuery の relation 生成
BigQuery の relation 生成yancya
 
use_legacy_sql=false
use_legacy_sql=falseuse_legacy_sql=false
use_legacy_sql=falseyancya
 
Relation の館
Relation の館Relation の館
Relation の館yancya
 
なんか
なんかなんか
なんかyancya
 
SQL 脳から見た Ruby
SQL 脳から見た RubySQL 脳から見た Ruby
SQL 脳から見た Rubyyancya
 
evacuate_from_sti
evacuate_from_stievacuate_from_sti
evacuate_from_stiyancya
 
A investigative report of refinements
A investigative report of refinementsA investigative report of refinements
A investigative report of refinementsyancya
 
RubyWorld Conference 2012 へ何で行ったのか
RubyWorld Conference 2012 へ何で行ったのかRubyWorld Conference 2012 へ何で行ったのか
RubyWorld Conference 2012 へ何で行ったのかyancya
 

Mehr von yancya (10)

Opencv by-yancya
Opencv by-yancyaOpencv by-yancya
Opencv by-yancya
 
どう書く日記
どう書く日記どう書く日記
どう書く日記
 
BigQuery の relation 生成
BigQuery の relation 生成BigQuery の relation 生成
BigQuery の relation 生成
 
use_legacy_sql=false
use_legacy_sql=falseuse_legacy_sql=false
use_legacy_sql=false
 
Relation の館
Relation の館Relation の館
Relation の館
 
なんか
なんかなんか
なんか
 
SQL 脳から見た Ruby
SQL 脳から見た RubySQL 脳から見た Ruby
SQL 脳から見た Ruby
 
evacuate_from_sti
evacuate_from_stievacuate_from_sti
evacuate_from_sti
 
A investigative report of refinements
A investigative report of refinementsA investigative report of refinements
A investigative report of refinements
 
RubyWorld Conference 2012 へ何で行ったのか
RubyWorld Conference 2012 へ何で行ったのかRubyWorld Conference 2012 へ何で行ったのか
RubyWorld Conference 2012 へ何で行ったのか
 

Kürzlich hochgeladen

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Kürzlich hochgeladen (10)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

SQLQL は GraphQL にとってなんなのか