2017-01-02 10 views
1

私はIPアドレスを格納する効率的な方法が必要です。
私がしたいのは、IPがテーブル内(または範囲内)にある場合です。
私はdjango + mysql、範囲を含むIPアドレスを格納する

192.168.0.1 - 192.168.1.255 

そしてまた、個々のIPアドレス、などの範囲を格納する必要があります。

多くのレコードがあるので、1つ1つ保管するのは無駄でしょう。しかし、もしそれが最善であれば、私はそれに行くだろう。 DjangoにはGenericIPAddressFieldフィールドがありますが、範囲は格納されません。

私の最高の解決策は何ですか?

答えて

1

2つのオプションがあり、どちらも2つの列を使用します。

オプション1、店あなたがオプション1を使用した場合、あなたのコードは

のように見えるかもしれませんIPとネットワークマスク

class IPmodel(models.Model): 
     start_ip = models.GenericIPAddressField() 
     mask = models.IntegerField() 

を格納し、IPエンドIP

class IPmodel(models.Model): 
     start_ip = models.GenericIPAddressField() 
     end_ip = models.GenericIPAddressField() 

オプション2を開始

IPmodel.objects.create(start_ip='192.168.1.0',end_ip='192.168.1.255') 
IPmodel.objects.filter(end_ip__gt='192.168.1.10').filter(start_ip__lt='192.168.1.10') 

オプション2を使用した場合は、F関数と標準ネットワークアドレスcalculあなたのフィルタリングを行うアトオン。

+0

と「どのようにip is in table」をクエリしますか? – user3599803

+0

各IPを別々に保存する方が効率的ですか?クエリーの速度に関しては、 – user3599803

+0

速度と保存の両方に関して。 – e4c5

関連する問題