Хранение 128-битных чисел в упругой или mongodb - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть требования к дизайну, чтобы иметь возможность сохранять адрес IPv6 в десятичном формате.В Java у меня есть BigInteger, который может содержать 40-значное число, и Oracle прекрасно принимает его через драйвер JDBC.

Как это сделать в Elastic или Mongo DB.Из того, что я прочитал, максимальные числа, поддерживаемые в эластичных или mongodb, являются 64-битными числами bigint.Например, если я конвертирую

 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF, 

десятичный формат будет

 340282366920938463463374607431768211455 (total of 39 digits). 

Каков наилучший способ решить эту проблему в упругой или монго.Мне нужно иметь возможность запускать функции диапазона (=, <, <=,> =) в этом поле для поиска документов.

1 Ответ

0 голосов
/ 11 февраля 2019

Начиная с Elasticserch 5.0, есть ip тип поля , который поддерживает как IPv4, так и IPv6.

Я бы рекомендовал использовать это в Elasticsearch, а не делатьцелочисленное / строковое преобразование.

Причина этого в том, что он естественным образом поддерживает запросы в стиле подсети, что, на мой взгляд, весьма удобно.Например,

GET index/_search
{
    “query”: {
        “term”: {
            “ip_addr”: “2001:db8::/48”
        }
    }
}

Также поддерживаются запросы диапазона для этого типа поля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...