2015年8月10日月曜日

IoT時代を生き残るためにIPを扱うならPostgreSQL!!

皆様、時代はIoTと言われてますがIPv6使ってますか?
IPv4でも面倒くさい色々と苦労はあったと思います。
ですがIPv6になると

  • ソートとか大変(文字列ソートではダメ)
  • 検索とかもっと面倒くさい(範囲の検索とか)
  • 特定のIPの次のIPを取得するの面倒くさい(IPのインクリメントでの払い出しとか)

などIPv4の時に苦労した事がIPv6ではもっと大変になります。
例えばPHPだとip2long()って関数がありますがIPv6は非対応です。
なぜかと言うとIPv6だとlongに入り切らないからね!!
そうなるとソートとかインクリメントとか工夫が必要になります。
ですがPostgreSQLのネットワークアドレス型を使うと良きに計らってくれます。
ソートや検索はORDER BYやWHEREでOK!
インクリメントについては

SELECT '192.168.0.1'::inet + 1


とするとちゃんと"192.168.0.2"を返してくれます。
勿論IPv6にも完全対応!!

SELECT '2001:0db8:0000:0000:3456:0000:0000:0000'::inet + 1


"2001:db8::3456:0:0:1"が帰ってきます!
見ての通り省略記法にも対応されてます。
検索も内包を

SELECT inet '192.168.1.5' << inet '192.168.1/24'


と表現できます!!
(この場合は含まれるのでTRUEが返ってきます)
勿論WHEREに

SELECT * FROM ip_address
WHERE ip << inet '192.168.1/24'

のような記述で書けます! 他にも色んな書き方ができるので是非公式ドキュメントを一読してみてください。

公式ドキュメント

と言うことでこれからIoTに関わるとネットワークを管理する必要が増えてくると思います。
そのときは是非ともPostgreSQLを使ってみてください。