Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: String constants vs int  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6269
fkthat
Hett,

А в чем, в общем-то, преимущество хранения в бинарном виде, кроме размера поля?

В строгой типизации, блиат
25 май 19, 22:28    [21893967]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6269
Свеженький пример 21893157
25 май 19, 22:29    [21893969]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Siemargl
Свеженький пример 21893157

И при чем тут типизация. Точно так же можно куда-нибудь сохранить вполне себе строготипизированные 8 байтов, а потом рвать волосы на джоппе, что они никак обратно на такие же строготипизированные 4 байта не натягиваются.
25 май 19, 22:44    [21893973]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
mayton
Member

Откуда: loopback
Сообщений: 41808
Для Mongo нет выделенного типа данных Ipv4, Ipv6.

Все равно придется строкой хранить.
25 май 19, 22:47    [21893975]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13556
mayton
Для Mongo нет выделенного типа данных Ipv4, Ipv6.

Все равно придется строкой хранить.


Binary еще не проходили?
25 май 19, 22:51    [21893976]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
mayton
Member

Откуда: loopback
Сообщений: 41808
Hett
mayton
Для Mongo нет выделенного типа данных Ipv4, Ipv6.

Все равно придется строкой хранить.


Binary еще не проходили?

Покажите как вы будете с этим Binary работать на примере в Mongo.
Создайте несколько документов с полем IPv6-Binary. И положите туда к примеру такие адреса:

::1 
fe80::f42:c2c3:d57:ce60
::192.168.0.1
ff00:: 


Я хочу посмотреть какие усилия вы на это потратите.

P.S. Нет ничего лучше чем постижение истины в примерах.
25 май 19, 23:34    [21893986]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58418
Блог
mayton
Создайте несколько документов с полем IPv6-Binary. И положите туда к примеру такие адреса:

Хм. А в чём проблема?
25 май 19, 23:51    [21893989]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
mayton
Member

Откуда: loopback
Сообщений: 41808
Просто хочу посмотреть вариант с строковым типом и с Binary.
26 май 19, 00:05    [21893992]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58418
Блог
mayton
Просто хочу посмотреть вариант с строковым типом и с Binary.

Я в жизни не видел Mongo, возможно, там какая-то специфика, а из общего представления о binary не вижу в задаче никаких сложностей. Скорее я бы посмотрел, как Вы в случае строковой реализации выдадите правильный результат сравнения адресов ::1 , 0::1 и 0::0::1.
26 май 19, 00:38    [21893996]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
vikkiv
Member

Откуда: London
Сообщений: 2399
softwarer
...Я в жизни не видел Mongo...
https://www.jdoodle.com/online-mongodb-terminal
если есть интерес то для string варианта скопируй туда
version();
db.ips.insert({_id:"::1"});
db.ips.insert({_id:"fe80::f42:c2c3:d57:ce60"});
db.ips.insert({_id:"::192.168.0.1"});
db.ips.insert({_id:"ff00::"});
db.ips.find();
db.ips.drop()
26 май 19, 02:47    [21894003]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
fkthat
Member

Откуда:
Сообщений: 1163
softwarer
Скорее я бы посмотрел, как Вы в случае строковой реализации выдадите правильный результат сравнения адресов ::1 , 0::1 и 0::0::1.


Просто нормализовывать все входные данные перед использованием. Я не топлю за то, чтобы прямо хранить IP как строку, и никак больше. Как уже писали, все должно зависеть от задачи. Можно, наверное, придумать ситуации, когда его вообще лучше по отдельным полям раскидать.
26 май 19, 06:18    [21894013]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13556
mayton

Я хочу посмотреть какие усилия вы на это потратите.

P.S. Нет ничего лучше чем постижение истины в примерах.



PHP

new MongoBinData(inet_pton($ip), MongoBinData::GENERIC)



Java

       
import org.bson.types.Binary;
         

new Binary(session.getIp().getAddress())
26 май 19, 07:01    [21894015]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13556
Это с чем я работал (и как). В монгошелле вы конечно не найдете, но это опять же к вопросу зачем в бд лазить руками.
26 май 19, 07:06    [21894016]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13556
Hett
Это с чем я работал (и как). В монгошелле вы конечно не найдете, но это опять же к вопросу зачем в бд лазить руками.


Когда-то я даже задавался такими вопросами
https://stackoverflow.com/questions/28537599/get-mongobindata-value-from-mongo-shell
26 май 19, 07:10    [21894017]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13556
softwarer
0::0::1.

Сокращение в адресе может быть только одно.
26 май 19, 07:20    [21894018]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58418
Блог
fkthat
Просто нормализовывать все входные данные перед использованием.

Но ведь нормализация - это по сути to_text(to_binary(string_value)). То есть такой ответ означает, что положить туда "такие адреса" не сложнее, чем любые другие.
26 май 19, 08:39    [21894021]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
alex55555
Member

Откуда:
Сообщений: 2129
fkthat
в теории guid в четыре раза меньше, но на практике разницы именно из-за размера никакой.

И на практике разница может быть 4 раза, и даже может быть 1000 раз. Если в память помещается весь индекс с интами, а с гуидами нет, например.
26 май 19, 12:25    [21894059]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
mayton
Member

Откуда: loopback
Сообщений: 41808
vikkiv
softwarer
...Я в жизни не видел Mongo...
https://www.jdoodle.com/online-mongodb-terminal
если есть интерес то для string варианта скопируй туда
version();
db.ips.insert({_id:"::1"});
db.ips.insert({_id:"fe80::f42:c2c3:d57:ce60"});
db.ips.insert({_id:"::192.168.0.1"});
db.ips.insert({_id:"ff00::"});
db.ips.find();
db.ips.drop()

Здесь у меня будет несколько дополнений. По юзкейсу. Использовать IPv6 поле как ObjectId. Скорее всего неверно.
Мой юзкейс предполагает что Ipv6 - это атрибут документа. А не уникальный ключ типа Objectid. В качестве вышеуказанного
лучше использовать встроенные в Mongo генераторы которые обеспечат правильный уникальный ключ.

Если конечно мы не делаем базу для обратного nslookup.
26 май 19, 14:47    [21894120]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
mayton
Member

Откуда: loopback
Сообщений: 41808
Hett
mayton
Я хочу посмотреть какие усилия вы на это потратите.

P.S. Нет ничего лучше чем постижение истины в примерах.



PHP

new MongoBinData(inet_pton($ip), MongoBinData::GENERIC)



Java

       
import org.bson.types.Binary;
         

new Binary(session.getIp().getAddress())

Типизацию я поддерживаю. Как способ strong check данных на входе и на выходе. Но из личного опыта использования
баз данных я остаюсь убежден в том что строковый формат представления информации на сегодняшний день является
наиболее удобным и универсальным.

Если-бы было наоборот - то в монго мы бы вставляли просто Java-serialized объекты в Externalized или Serialized формате как
в key-value db. Но это не происходит. На практике мы всё равно используем BSON-дерево из различных типов большая часть
всё равно строковые (именно в силу природы вещей, или в силу входных данных). Более того. Все новые. Неизвестные
и неидентифицированные входные данные 99% будут строками. Такой-вот либерализм этой модели.

Строгая типизация всего документа скорее всего противоречила-бы самой идее Mongo-документа или навязывала-бы нам
другое техническое задание где был-бы не Mongo-двигатель а какой-нибудь RDBMS.

Либеральный тип sting даст нам возможность залоггировать IPv4, IPv6, domain-name и более широкий спектр значений.
А проверки на домен значений мы можем сделать на клиенте.

По поводу экономии места и т.п.

Мы живём в эпоху BigData и носителей информации которые стоят меньше цента за мегабайт. И разумно думать скорее
об удобстве программирования и использования. Никто вас не похвалит за экономию 96 (128 - 32 = 96bit) бит информации
за каждый документ. (Да я еще раз делаю упор именно на документ. А документ это порция информации заведомо больше
чем data-row для key-value. Я вангую что документ обычно начинаетяс от 1 килобайта информации)

А вот проблемы при отчотах (два поля для IPv4, IPv6) или кастинг на map-reduce операциях

IPv6 (кстати) при грамотном распределении блоков позволит кстати экономить место на нулях в нотации записи адреса.

Линки по теме
https://docs.mongodb.com/manual/reference/bson-types/#objectid
http://www.ciscopress.com/articles/article.asp?p=2803866
26 май 19, 15:10    [21894132]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
fkthat
Member

Откуда:
Сообщений: 1163
alex55555
fkthat
в теории guid в четыре раза меньше, но на практике разницы именно из-за размера никакой.

И на практике разница может быть 4 раза, и даже может быть 1000 раз. Если в память помещается весь индекс с интами, а с гуидами нет, например.


Для MSSQL если индекс кластерный, то пофиг - потому что там кластерный индекс это вся таблица. Как в других БД я не знаю. И я не бог весть как DBA (не моя сфера), но как-то с трудом представляю, чтобы 4-байтовый индекс в память залез, а вот уже 16-байтовый никак - это, наверное, надо как-то совсем уж на краю лимита памяти балансировать. Проблема с производительностью там возникает cовсем в другом - когда по незнанию используют для кластерного индекса обычный guid, а не "sequential".
26 май 19, 15:56    [21894149]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13556
mayton
vikkiv
пропущено...
https://www.jdoodle.com/online-mongodb-terminal
если есть интерес то для string варианта скопируй туда
version();
db.ips.insert({_id:"::1"});
db.ips.insert({_id:"fe80::f42:c2c3:d57:ce60"});
db.ips.insert({_id:"::192.168.0.1"});
db.ips.insert({_id:"ff00::"});
db.ips.find();
db.ips.drop()

Здесь у меня будет несколько дополнений. По юзкейсу. Использовать IPv6 поле как ObjectId. Скорее всего неверно.
Мой юзкейс предполагает что Ipv6 - это атрибут документа. А не уникальный ключ типа Objectid. В качестве вышеуказанного
лучше использовать встроенные в Mongo генераторы которые обеспечат правильный уникальный ключ.

Если конечно мы не делаем базу для обратного nslookup.


А где здесь ObjectId? Просто строку вставили в качестве _id. Никакого ObjectId здесь нет и в помине.
26 май 19, 16:03    [21894151]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
mayton
Member

Откуда: loopback
Сообщений: 41808
Hett
mayton
пропущено...

Здесь у меня будет несколько дополнений. По юзкейсу. Использовать IPv6 поле как ObjectId. Скорее всего неверно.
Мой юзкейс предполагает что Ipv6 - это атрибут документа. А не уникальный ключ типа Objectid. В качестве вышеуказанного
лучше использовать встроенные в Mongo генераторы которые обеспечат правильный уникальный ключ.

Если конечно мы не делаем базу для обратного nslookup.


А где здесь ObjectId? Просто строку вставили в качестве _id. Никакого ObjectId здесь нет и в помине.

Вы - специалист в MongoDb?
26 май 19, 16:06    [21894155]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13556
mayton
Тут мне вспоминается текст из Бородино:

> Земля тряслась — как наши груди,
> Смешались в кучу кони, люди,

Это же надо было так все в кучу намешать.


mayton
Типизацию я поддерживаю. Как способ strong check данных на входе и на выходе. Но из личного опыта использования
баз данных я остаюсь убежден в том что строковый формат представления информации на сегодняшний день является
наиболее удобным и универсальным.

Надеюсь числа не храните в строках? А то напридумывали всяких форматов с плавающей точкой, проще в строке сохранить, а потом на яве сразу передать эту строку в конструктор BigDecimal, да?


mayton
Если-бы было наоборот - то в монго мы бы вставляли просто Java-serialized объекты в Externalized или Serialized формате как key-value db.

Да вставляйте, кто не дает то. Если вы не видите причин чтобы так не делать, то делайте.

mayton
Но это не происходит. На практике мы всё равно используем BSON-дерево из различных типов большая часть
всё равно строковые (именно в силу природы вещей, или в силу входных данных). Более того. Все новые. Неизвестные
и неидентифицированные входные данные 99% будут строками. Такой-вот либерализм этой модели.

Что у вас там за неидентифицированные данные?


mayton
Строгая типизация всего документа скорее всего противоречила-бы самой идее Mongo-документа или навязывала-бы нам
другое техническое задание где был-бы не Mongo-двигатель а какой-нибудь RDBMS.

Строгая типизация это что такое?
Вообще в монге есть валидация схемы, но вы про не знали конечно https://docs.mongodb.com/manual/core/schema-validation/
По вашему, получается, монга противоречива самой себе? Да и не пойму я полета вашей мысли, у вас одно и то же поле в пределах коллекции может от документа к документу типы менять?

mayton
Либеральный тип sting даст нам возможность залоггировать IPv4, IPv6, domain-name и более широкий спектр значений.
А проверки на домен значений мы можем сделать на клиенте.

Да это понятно, что можно. Тут вопрос не в том, что можно, а в том как лучше.
При поиске по коллекции тоже будете ее на клиенте перебирать?

mayton
Мы живём в эпоху BigData и носителей информации которые стоят меньше цента за мегабайт. И разумно думать скорее
об удобстве программирования и использования. Никто вас не похвалит за экономию 96 (128 - 32 = 96bit) бит информации
за каждый документ. (Да я еще раз делаю упор именно на документ. А документ это порция информации заведомо больше
чем data-row для key-value. Я вангую что документ обычно начинаетяс от 1 килобайта информации)
А вот проблемы при отчотах (два поля для IPv4, IPv6) или кастинг на map-reduce операциях

Вы вроде в разделе Java завсегдатый, а что такое биг-дейта не знаете? Зачем ее сюда приплетать, какое отношение она имеет к вопросу о способе хранения данных в монге? Или вы хедупом будете потом записанный ранее " IPv4, IPv6, domain-name и более широкий спектр значений" искать по коллекции с непонятными полями?
Более того, тут в топике уже не раз написали о том, что проблема не столько в дисковом пространстве, сколько в ОЗУ, в которой индекс загружен. И экономию в битах измерять, это весьма странно? А индекс посчитали? А если их несколько? Откуда информация про 1 килобайтный размер документа вообще?

mayton
IPv6 (кстати) при грамотном распределении блоков позволит кстати экономить место на нулях в нотации записи адреса.


Вот рандомный IPv6 адрес 2a02:810c:1bf:b204:f142:ca18:6b06:484b
Чтобы не быть голословным, продемонстрируйте пожалуйста, как вы грамотно блоки распределите для экономии?
26 май 19, 16:23    [21894163]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13556
mayton
Hett
пропущено...


А где здесь ObjectId? Просто строку вставили в качестве _id. Никакого ObjectId здесь нет и в помине.

Вы - специалист в MongoDb?


Что подразумевается под "специалист"? Больше 5 лет я с ней работаю. Вы так на вопрос то и не ответили, где ObjectId? Не съезжате с темы, уважаемый.
26 май 19, 16:25    [21894166]     Ответить | Цитировать Сообщить модератору
 Re: String constants vs int  [new]
mayton
Member

Откуда: loopback
Сообщений: 41808
Hett
mayton
пропущено...

Вы - специалист в MongoDb?


Что подразумевается под "специалист"? Больше 5 лет я с ней работаю. Вы так на вопрос то и не ответили, где ObjectId? Не съезжате с темы, уважаемый.

Отлично. Я ждал этого. Тогда почему был использован
{_id:"fe80::f42:c2c3:d57:ce60"} 

?
вместо
{ipv6:"fe80::f42:c2c3:d57:ce60"}

Это - дизайн будущей БД. И любое действие надо обосновывать.
26 май 19, 19:11    [21894224]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Программирование Ответить