|
Прошу проверить код | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
27.04.21
✎
21:00
|
Дня доброго.
Есть задача собрать хеш с данных, записать его в 1С и выполнять поиск по нему. Хеш я решил собрать MD5, проверил на 15 млн. записей, коллизий не нашел. MD5 - это 16 байт и я их отлично засуну в УникальныйИдентификатор 1С и проиндексирую. В виде строки это будет 32 символа, 64 байта в данных и такое хранение хеша и его индекса нам и вообще не нужно. Новый ХешированиеДанных(MD5) возвращает хеш в виде ДвоичныхДанных, которые мне надо преобразовать в UUID. Делаю я это так: Функция ПреобразоватьДвоичныеДанныеВУникальныйИдентификатор(Данные) Экспорт Если Данные.Размер()<>16 Тогда //В уникальном идентификаторе должно быть 16 байт Возврат Неопределено; КонецЕсли; БуферДвоичныхДанныхХеша=ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Данные); // 16 байт D1=БуферДвоичныхДанныхХеша.ПолучитьСрез(0,4); // 4 первых байта D1=D1.Перевернуть(); // hex требует bigEndian D2=БуферДвоичныхДанныхХеша.ПолучитьСрез(4,2); // 2 вторых байта D2=D2.Перевернуть(); D3=БуферДвоичныхДанныхХеша.ПолучитьСрез(6,2); // 2 третьих байта D3=D3.Перевернуть(); D4=БуферДвоичныхДанныхХеша.ПолучитьСрез(8); // 8 байт остатка D40=D4.ПолучитьСрез(0,1); D41=D4.ПолучитьСрез(1,1); D42=D4.ПолучитьСрез(2,1); D43=D4.ПолучитьСрез(3,1); D44=D4.ПолучитьСрез(4,1); D45=D4.ПолучитьСрез(5,1); D46=D4.ПолучитьСрез(6,1); D47=D4.ПолучитьСрез(7,1); D1=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D1); D2=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D2); D3=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D3); D40=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D40); D41=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D41); D42=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D42); D43=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D43); D44=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D44); D45=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D45); D46=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D46); D47=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(D47); ИдентификаторСтрокой=D1+"-"+D2+"-"+D3+"-"+D40+D41+"-"+D42+D43+D44+D45+D46+D47; Возврат Новый УникальныйИдентификатор(ИдентификаторСтрокой); КонецФункции |
|||
1
H A D G E H O G s
27.04.21
✎
21:05
|
Я эту шлабуду проверил, сохранив эти ДвоичныеДанные в файл, загрузив его 16 байт в Дельфи, в TGUID и преобразуя TGUID в строку.
Именно таким образом я понял, что нужно делать: D1=D1.Перевернуть(); // hex требует bigEndian так как порядок байт в hex представлении не совпадал (сформированной в 1С и Дельфи). Конечно, пофиг, у меня обратной функции не будет и она не требуется, но все же. Вообще, нет ли каких - то вшитых ограничений на TGUID. Можно ли в него засовывать все, что хочешь. Я прогнал 10Кзаписей и пока вроде норм. Дальше потестю на 15 млн, но думаю, все будет ок. |
|||
2
Garykom
гуру
27.04.21
✎
21:07
|
(0) >ИдентификаторСтрокой=D1+"-"+D2+"-"+D3+"-"+D40+D41+"-"+D42+D43+D44+D45+D46+D47;
замени на СтрШаблон() |
|||
3
vde69
27.04.21
✎
21:08
|
Зачем все это?
|
|||
4
H A D G E H O G s
27.04.21
✎
21:09
|
(3) Процитирую то, что написал на партнерке:
"В связи с активным внедрением систем маркировок и прослеживаемости товаров встает проблема адекватного хранения цифровых идентификаторов. На данный момент, цифровые идентификаторы представлены нижней частью ASCII таблицы символов (цифры и латиница) и позволяют хранить себя в однобайтных строках. Для цифровых идентификаторов размером 150 символов (новые алкогольные марки) это становится уже критичным. Использование 2-хбайтных строк влечет за собой 2-х кратный рост как таблицы данных, так и таблицы индекса по этому идентификатору, а также избыточные накладные на обновление индекса и поиска по нему. Конечно, мы можем это обойти построением хешей MD5, размером в 16 байт, которые корректно можно преобразовать в УникальныйИдентификатор и реализовать хранение средствами платформы, а значения цифровых идентификаторов хранить в хранилище значений, перегнав их в однобайтную строку, но это как то странно выглядит в целом." |
|||
5
H A D G E H O G s
27.04.21
✎
21:11
|
У нас таблица марок уже самая большая в системе.
Ушедшие марки я хочу архивировать, исключая из индекса строковое ее представление и помещая ее в однобайтное хранилище (скорее всего без сжатия). А в индекс засовывать 16 байтных хеш для поиска. |
|||
6
Garykom
гуру
27.04.21
✎
21:11
|
(0) И код оптимизируй, точнее надо будет сравнить по скорости
Может проще ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); ХешированиеДанных.Добавить("Hello Word!"); MD5Строкой = СокрЛП(ХешированиеДанных.ХешСумма); И далее из строки вытащить в формат для Новый УникальныйИдентификатор |
|||
7
H A D G E H O G s
27.04.21
✎
21:12
|
(6) "MD5Строкой = СокрЛП(ХешированиеДанных.ХешСумма);"
Это недокументированная фича. |
|||
8
Garykom
гуру
27.04.21
✎
21:12
|
(7) Кто сказал?
|
|||
9
H A D G E H O G s
27.04.21
✎
21:13
|
(8) Base64Строка(), добавляющий переносы строк, сказал.
|
|||
10
H A D G E H O G s
27.04.21
✎
21:14
|
(8) Да, это работает, но вдруг 1С скажет - ага и выключит. Лучше я документированными методами это сделаю. По быстродействию все нормально.
|
|||
11
Garykom
гуру
27.04.21
✎
21:15
|
(9) (10) ПолучитьСтрокуИзДвоичныхДанных ?
|
|||
12
timurhv
27.04.21
✎
21:16
|
(4) 13млн марок весит 5.5Гб с SHA256 по приходу (переделал кстать как в других темах советовали). Можно и до 3-4 Гб уменьшить, но тогда будет долгая запись.
В основном это сигареты за 10 мес. Очистку не делал, объем считаю приемлемым, когда начнут расти таблицы буду удалять проданные марки. |
|||
13
H A D G E H O G s
27.04.21
✎
21:16
|
(11) Нет, Егор.
|
|||
14
Garykom
гуру
27.04.21
✎
21:16
|
(11)+ хотя это изврат
|
|||
15
Garykom
гуру
27.04.21
✎
21:18
|
Кстати изначально хеш MD5 для поиска это изврат
|
|||
16
H A D G E H O G s
27.04.21
✎
21:18
|
(12) Ну я пока буду архивировать, если они будут заново по возвратам заходить - разархировать.
|
|||
17
Garykom
гуру
27.04.21
✎
21:19
|
Имхо выноси наружу из 1С и не страдай хе
|
|||
18
H A D G E H O G s
27.04.21
✎
21:19
|
(15) Дадада, Егор. По сабжу что-то будет?
|
|||
19
Garykom
гуру
27.04.21
✎
21:19
|
(17)+ sqlite или иная СУБД
|
|||
20
Garykom
гуру
27.04.21
✎
21:20
|
(18) см (17)
про код ничего |
|||
21
rsv
27.04.21
✎
21:21
|
(0) имха зачем имитировать рабоиу субд по хранению и
поиску ? Неужели субд загнется при поиске в табличке по полю с типом варчар150? |
|||
22
H A D G E H O G s
27.04.21
✎
21:21
|
(20) Ок.
|
|||
23
H A D G E H O G s
27.04.21
✎
21:22
|
(21) А вы не в КТ-2000 работаете :-) ?
https://kt-alkogol.ru/forum/10-----/6641-khranilishche-aktsiznykh-marok.html |
|||
24
Garykom
гуру
27.04.21
✎
21:23
|
(21) можно SGTIN разбить на две части так то и хранить в двух табличках
|
|||
25
Garykom
гуру
27.04.21
✎
21:23
|
(24)+ или иной идентификатор если у него определен внутренний формат по которому можно разделить
|
|||
26
Garykom
гуру
27.04.21
✎
21:24
|
(25)+ а делать от длинного идентификатора MD5 хэш и хранить его это легкий изврат
|
|||
27
timurhv
27.04.21
✎
21:25
|
(16) Я планирую раз в месяц\квартал окончательно удалять записи из БД после истечения срока возврата от покупателя. Удаляемые данные скидывать в текстовый файл с архивированием.
Зачем этот мусор старый? :) |
|||
28
H A D G E H O G s
27.04.21
✎
21:26
|
(25) (26) Это можно было бы сделать для новых марок, у которых есть значащая часть в первые 14 символов, но у нас остаются старые марки, у которых другая значащая часть. Писать 2 алгоритма это не меньший изврат.
|
|||
29
H A D G E H O G s
27.04.21
✎
21:27
|
(25) (26) Ну и переход на эту стратегию влечет большие изменения, а тут я делаю лишь надстройку и не рушу все работающее.
|
|||
30
H A D G E H O G s
27.04.21
✎
21:27
|
(27) Иногда может пригодиться для разбора ситуаций
|
|||
31
H A D G E H O G s
27.04.21
✎
21:28
|
(27) Срок возврата как то регламентирован?
|
|||
32
Garykom
гуру
27.04.21
✎
21:30
|
(31) 3 года вроде или "срок годности"
|
|||
33
Garykom
гуру
27.04.21
✎
21:31
|
(32)+ Учти что марки будут повторяться через ХЗ лет
Это заложено |
|||
34
timurhv
27.04.21
✎
21:39
|
(30) Думаю файл формировать по наименованию GTIN + Год + Месяц/Квартал. Если надо будет поднять историю, то сделаю обработку по поиску марки в этих файлах.
(31) Только законом и расширенным сроком от производителя. У нас основной объем по количеству марок сигареты и молочка, не думаю что там необходимо хранить марки после продажи в течение 1-3 мес. |
|||
35
BeerHelpsMeWin
27.04.21
✎
21:53
|
я бы тоже все лишнее раньше какого-то периода вынес во внешний источник
|
|||
36
Вафель
27.04.21
✎
22:24
|
А разве в алкомарке серия+номер не уникальны?
|
|||
37
Garykom
гуру
27.04.21
✎
22:27
|
(36) "серия+номер" занимают много места в базе, ТС решил брать от них MD5 и хранить только его
|
|||
38
Вафель
27.04.21
✎
22:28
|
Серия 3 знака и номер 8 . Итого 11
|
|||
39
Garykom
гуру
27.04.21
✎
22:32
|
(38) хохо
|
|||
40
Garykom
гуру
27.04.21
✎
22:33
|
||||
41
Вафель
27.04.21
✎
22:34
|
(40) и что там? влом читать
|
|||
42
Garykom
гуру
27.04.21
✎
22:34
|
(41) 150 символов что в 1С при 2 байта на символ много в базе
|
|||
43
Garykom
гуру
27.04.21
✎
22:35
|
(42)+ 300 байт vs 16 байт УИД/Ссылка
|
|||
44
Вафель
27.04.21
✎
22:36
|
Ну так я же предлагал оставить только серию и номер
|
|||
45
H A D G E H O G s
27.04.21
✎
22:44
|
(44) Это на новую марку. На старую - по другому.
|
|||
46
Вафель
27.04.21
✎
23:01
|
А эти хэши хранить где?
В новом справочнике? |
|||
47
mistеr
27.04.21
✎
23:03
|
А каков размер самих этих марок? Я просто не в теме.
Причины заморачиваться с хешами должны быть очень весомые. Место на дисках сейчас не дорогое. |
|||
48
aka MIK
27.04.21
✎
23:04
|
(15) почему? долго md5 рассчитывается? есть метрики?
|
|||
49
Garykom
гуру
27.04.21
✎
23:09
|
(48) та не просто сама идея хеша для ускорения поиска теряется тут
от дублей защита слабая что один хэш будет на разные марки короче изврат |
|||
50
aka MIK
27.04.21
✎
23:14
|
(49) хеш не будет один на разные марки, это же его суть
|
|||
51
Garykom
гуру
27.04.21
✎
23:22
|
(50) опс
|
|||
52
Garykom
гуру
27.04.21
✎
23:23
|
||||
53
H A D G E H O G s
28.04.21
✎
01:05
|
(46) Отдельный РС.
Значения ШК я сначалл хотел вынести в отдельный справочник и хранить их по 10000 значений в элементе, чтобы было эффективное сжатие, а в РС - указатель на место ШК (аналог хранения в файлах), но обнаружилось, что коэффициент сжатия 1 Мб шк всего 50% (1 Мб сжимается в 500 Кб), так как криптохвосты слишком уникальны. Лучше всего срабатывал bzip2 (скорее всего из-за преобразования Барроуза — Уилера), но на столь малый выигрыш я решил забить и хранить ШК в элементе справочника. |
|||
54
Конструктор1С
28.04.21
✎
06:07
|
Эм... А стоит ли овчинка выделки? Расчет делал, сколько твои 15 млн занимают и втом и в том виде?
|
|||
55
Йохохо
28.04.21
✎
06:25
|
(52) мд5 не надежен из-за существования алгоритма поиска коллизии, а не из-за алгоритма формирования. по мощности вроде 10е-8 данные/мд5, на реальных будет типа 10е-30 и все норм если в егаис хацкеров не завезут
|
|||
56
Йохохо
28.04.21
✎
06:29
|
+ афаир там атака подменой блока, т.е. она алгоритмически не реализуема на 200 байтах
|
|||
57
Почему 1С
28.04.21
✎
07:43
|
(54) 166 против 300 байт
(0) Каким методом получаешь однобайтовую строку? |
|||
58
victuan1
28.04.21
✎
08:09
|
(28) А чем плохо написать разные алгоритмы для разных видов марок?
1) для ЧЗ: ГТИН+СерНУМ 2) для новой алкомарки: первые 14 символов 3) для старой алкомарки: 23 символа, начиная с 9-го. Чем не ХЭШ-функция? И никаких вероятностных коллизий. И заодно готовый КИ (CIS) без траты времени его вычисления доп. функцией |
|||
59
sitex
naïve
28.04.21
✎
08:11
|
(0) Спрашивается, для чего хранить это в 1С, может все таких вынести.?
|
|||
60
sitex
naïve
28.04.21
✎
08:12
|
(58) Не меньше времени уйдет вычислять какой вид у тебя марки .
|
|||
61
Кирпич
28.04.21
✎
08:21
|
Нахер чота выдумывать. Хранить как есть во внешней базе. Дешево, удобно и практично. Пока Китайцы не перестали делать нам новые террабайтные диски, проблем нету.
|
|||
62
Почему 1С
28.04.21
✎
08:24
|
(61) Как будто хранение во внешней базе сделано из коробки и не надо для этого тоже код писать выдумывать. А потом при надобности обратно все забирать из внешней базы.
|
|||
63
Кирпич
28.04.21
✎
08:25
|
(62) Программисты напишут. Один хрен сидят на мисте. Пускай работают.
|
|||
64
sitex
naïve
28.04.21
✎
08:31
|
(0) Во одной конторе, видел вынос базы по маркам в MongoDB. Подробностей не знаю реализации . Просто видел что в базе этих марок нет.
|
|||
65
timurhv
28.04.21
✎
08:55
|
(58) Разные регистры букв для запроса СУБД одно и тоже:
00000000000001aaaaaaa 00000000000001AAAAAAA Соответственно в регистр сведений 1С эти марки не запишутся и вывалится ошибка: "Запись с такими ключевыми полями существует!". |
|||
66
Kongo2019
28.04.21
✎
08:56
|
(0)Круто подошел, а тупо запихал во отдельную базу, на Firberd, сделал свою оболочку для обмена.
|
|||
67
Garykom
гуру
28.04.21
✎
09:02
|
(55) Причем тут поиск коллизии когда даже без специального поиска вероятность наткнуться слишком высока
И то что ТС "проверил на 15 млн. записей, коллизий не нашел" нихрена не значит |
|||
68
Garykom
гуру
28.04.21
✎
09:03
|
(61) +1 за внешнее хранение
|
|||
69
Кирпич
28.04.21
✎
09:13
|
(68) Да тупо базу 1с с одним справочником и http сервисом. Это если не обучен всяким эскулайтам, фаирбёрдам и прочим питонам с сишарпами
|
|||
70
Кирпич
28.04.21
✎
09:13
|
миллион ключей это 150 мегабайт
|
|||
71
Почему 1С
28.04.21
✎
09:19
|
(70) 300 же, но все равно фигня согласен.
|
|||
72
Кирпич
28.04.21
✎
09:20
|
(71) почему 300? вроде 150 байт одна марка
|
|||
73
Garykom
гуру
28.04.21
✎
09:24
|
(72) марка да а хранение символов в строках в 1С 2 в 1
|
|||
74
Кирпич
28.04.21
✎
09:28
|
(72) А. Ну тогда если мало, то на 1с, а если много, то на любую другую субд
|
|||
75
H A D G E H O G s
28.04.21
✎
10:56
|
Вы такие интересные.
А что даст вынос во внешнюю базу? |
|||
76
Кирпич
28.04.21
✎
10:59
|
(75) Так вроде бы место в базе хотели съэкономить
|
|||
77
Kongo2019
28.04.21
✎
11:00
|
(75) Так это с ней можно работать напрямую, не средствами 1С.
причем FireBerd делает MSSQL в легкую. да железо у меня слабое, и готовит я не умею. Ну как-то так. вот. |
|||
78
H A D G E H O G s
28.04.21
✎
11:05
|
(76) Ну базу то нужно разместить на том же сервере. По сети мы потеряем в производительности.
|
|||
79
Кирпич
28.04.21
✎
11:14
|
(78) А у вас конвейер чтоли с бутылками?
|
|||
80
Кирпич
28.04.21
✎
11:14
|
Или алкогольный гипермаркет
|
|||
81
Garykom
гуру
28.04.21
✎
11:15
|
(78) Какой именно производительности вы потеряете?
Думаешь запрос внутри 1С быстрее чем запрос наружу? |
|||
82
H A D G E H O G s
28.04.21
✎
11:16
|
(79) Ну типа подождут?
|
|||
83
Garykom
гуру
28.04.21
✎
11:16
|
(82) Типа ты протести, причем смотря как делать запросы
|
|||
84
Кирпич
28.04.21
✎
11:16
|
(82) Ту долю миллисекунды подождут
|
|||
86
mistеr
28.04.21
✎
11:17
|
(75) Например, возможность использовать все возможности СУБД для компактного хранения.
И для эффективного поиска, вроде блум фильтров. |
|||
87
Garykom
гуру
28.04.21
✎
11:17
|
(85) У тебя сервер 1С один хер сервер sql вызывает
И точно такое же если прямые запросы можешь делать на тот же сервер sql Только не через запросы 1С а напрямую |
|||
88
H A D G E H O G s
28.04.21
✎
11:18
|
Хотя нет, немного не так я общение построил.
Егора я просто игнорить буду. |
|||
89
Конструктор1С
28.04.21
✎
11:18
|
(57) получается вся затея ради экономии пары гигабайт места на диске? Ну я прям не знаю...
|
|||
90
Garykom
гуру
28.04.21
✎
11:18
|
(89) Хохо. Бэкап базы 1С
|
|||
91
Garykom
гуру
28.04.21
✎
11:20
|
(90)+ Мы как доки из документооборота вынесли так бэкап (который по сложным графикам и много хранится долго) стал вместо 20 гигов всего 200мб
|
|||
92
H A D G E H O G s
28.04.21
✎
11:20
|
(89) 15 млн марок занимает 14 Гб места. Это я замерял на одном из клиентов, который набрал такой объем за 10 месяцев.
Сейчас есть клиент, который заявляет 10 млн марок за месяц. Давайте посчитаем, сколько Гб места потребуется клиенту в год на хранение всего одной таблицы в базе? |
|||
93
Конструктор1С
28.04.21
✎
11:20
|
(87) ком-соединения будут долго подниматься
|
|||
94
Garykom
гуру
28.04.21
✎
11:21
|
(93) в жопу ком
|
|||
95
Garykom
гуру
28.04.21
✎
11:21
|
(94)+ имхо ВК или http даже если списком марки а не по одной
|
|||
96
Кирпич
28.04.21
✎
11:24
|
(92) А не анализировали как часто им эти марки нужно потом из базы доставать?
|
|||
97
sitex
naïve
28.04.21
✎
11:25
|
(93) COM вообще надо забыть как страшный сон и не произносить в слух. )))
|
|||
98
H A D G E H O G s
28.04.21
✎
11:25
|
(96) Нет, не анализировали.
Но иногда нужно понимать, какие марки продавали клиенту, когда он заявляет пересорт, к примеру. |
|||
99
sitex
naïve
28.04.21
✎
11:26
|
(98) А какие сложности итого по выносу ? .Если у других уже есть практика выноса за пределы 1С
|
|||
100
Кирпич
28.04.21
✎
11:27
|
В 1с их точно пихать не надо. Хоть заужимайся, один хрен база распухать будет. Да и вычисление MD5 это нихрена не быстрый процесс. Не намного быстрее обращения через сеть.
|
|||
101
H A D G E H O G s
28.04.21
✎
11:27
|
(99) У всех есть какая-то практика и они ее придерживаются.
|
|||
102
Конструктор1С
28.04.21
✎
11:27
|
(92) так и в чём проблема? Клиенту лишь надо подкупить ХДД, которые обойдутся в разы дешевле работ по оптимизации
|
|||
103
Kongo2019
28.04.21
✎
11:28
|
(92) Ну пусть диски купит. У месяц, линия розлива до 100 гигов в пике. И ниче. Купили PCI-E SSD на терабайту нормально тянет.
|
|||
104
H A D G E H O G s
28.04.21
✎
11:28
|
(102) Я это делаю в свое свободное личное время.
|
|||
105
Конструктор1С
28.04.21
✎
11:30
|
(104) ну тады ладн
|
|||
106
mistеr
28.04.21
✎
11:31
|
(98) Для "иногда" как раз лучше внешняя БД. А если это единичные случаи, то можно и текстовый фай разархивировать и погрепать.
Жаль, что не анализировали. От тебя я наоборот ожидал системного подхода. |
|||
107
H A D G E H O G s
28.04.21
✎
11:33
|
(106) Звиняйте, ананасав нема.
|
|||
108
Вафель
28.04.21
✎
11:35
|
(98) какие марки продавали ты не узнаешь, только можно будет определить продавали ли эти конкретно марки или нет
|
|||
109
Garykom
гуру
28.04.21
✎
11:36
|
(107) Дима, вот ты иногда упираешься как животное на букву б
|
|||
110
Вафель
28.04.21
✎
11:36
|
(106) +1 за внешнюю БД
|
|||
111
H A D G E H O G s
28.04.21
✎
11:37
|
(108) А?
|
|||
112
H A D G E H O G s
28.04.21
✎
11:37
|
(110) Вопрос даже не стоит
|
|||
113
Вафель
28.04.21
✎
11:37
|
(111) у тебя же кода не будет, только хэш.
А это односторонняя функция |
|||
114
sitex
naïve
28.04.21
✎
11:37
|
(110) Голосовалки жаль нет.
|
|||
115
Вафель
28.04.21
✎
11:38
|
(112) ну вот уже и твоя система начинает обрастать костылями вместо нормальных решений
|
|||
116
ILM
гуру
28.04.21
✎
11:39
|
Если на блокчейн перевести алкомарки, то может пить перестанут. Пока новый блок найдется, пока на его основе создадут набор акцизов и т.д.
|
|||
117
Кирпич
28.04.21
✎
11:39
|
||||
118
H A D G E H O G s
28.04.21
✎
11:40
|
(100) 71К преобразований за 6 секунд. Ну в принципе, долговато, но я попробую вынести в ВК, может даст эффект.
https://prnt.sc/126uedx |
|||
119
H A D G E H O G s
28.04.21
✎
11:40
|
(113) Будет, Анатолий.
|
|||
120
Вафель
28.04.21
✎
11:41
|
(119) если код остается, то в чем вообще смысл тогда
|
|||
121
Кирпич
28.04.21
✎
11:42
|
(118) А если процессор начнет дымить, то можно форточку открыть
|
|||
122
H A D G E H O G s
28.04.21
✎
11:42
|
(113) Ты немного не понял.
Проблема то в том, что Алкомарка храниться в избыточных 300 байтах с избыточным индексом по этим 300 байтам. Я эти 300 байт заменяю на 16 байт хеша. А этот 150 символьный код храню в отдельном реквизите как 150 байт в ДвоичныхДанных, так как у 1С нет однобайтных строк. И при необходимости, могу сделать обратную операцию. |
|||
123
H A D G E H O G s
28.04.21
✎
11:43
|
(121) Ахахаха.
|
|||
124
Вафель
28.04.21
✎
11:44
|
(122) и какой выигрыш на 1 млн марок?
|
|||
125
sitex
naïve
28.04.21
✎
11:45
|
(122) Получается еще и * 2 данные в базе.
|
|||
126
H A D G E H O G s
28.04.21
✎
11:46
|
(124)
300 Мб данных превращаются в 16 Мб данных. 300*1.2 Мб индекса превращаются в 16*1.2 Мб индекса Добавляется 150 Мб данных. |
|||
127
sitex
naïve
28.04.21
✎
11:50
|
(126) Время на обработку всех этих манипуляций и время выноса в стороннюю БД - очень интересно где профит будет выше.
|
|||
128
H A D G E H O G s
28.04.21
✎
11:51
|
(127) Время на обработку будет ночью регламентным заданием
|
|||
129
Garykom
гуру
28.04.21
✎
11:51
|
(117) Подразумевал те которые Муфлоны и Уриалы
|
|||
130
Ёпрст
28.04.21
✎
11:52
|
(122) ты в наименование свой хеш закинуть хочешь ?
А саму марку хранить еще где, с ссылкой на этот хеш ? ЗЫ: всё не читал |
|||
131
sitex
naïve
28.04.21
✎
11:53
|
(128) А если потребуется здесь и сейчас ? нужны данные по поиску по конкретной марки Отчет движения ?
|
|||
132
Кирпич
28.04.21
✎
11:53
|
А можно копнуть в сторону переделать строку чтобы она занимала 150 байт. Выглядеть будет типа как абракадабра, но зато 150, а не 300
|
|||
133
H A D G E H O G s
28.04.21
✎
11:54
|
(131) Марка в архиве будет восстанавливаться обратной функцией.
|
|||
134
H A D G E H O G s
28.04.21
✎
11:55
|
(132) nvarchar в SQL-е занимает 2 байта на символ.
|
|||
135
sitex
naïve
28.04.21
✎
11:55
|
(133) Это понятно. Интересно что будет быстрее.
|
|||
136
Кирпич
28.04.21
✎
11:57
|
(134) ну и пускай. пихать в нее строку 75 символов. В базе будет 150
|
|||
137
Кирпич
28.04.21
✎
11:57
|
Нолики поудалять
|
|||
138
H A D G E H O G s
28.04.21
✎
11:57
|
(130) Сейчас у меня есть справочник Марки, код храниться в Наименовании.
Я планирую сделать отдельный РС, в котором буду хранить хеш и ссылку на справочник, в справочнике Наименование будет пусто, а в отдельном реквизите "АрхивДанныхМарки" торчать код марки. |
|||
139
H A D G E H O G s
28.04.21
✎
11:58
|
(136) Я это сделаю через ХранилищеЗначений.
|
|||
140
Кирпич
28.04.21
✎
11:59
|
(139) Так надо же индекс делать
|
|||
141
H A D G E H O G s
28.04.21
✎
11:59
|
(140) см (138). Индекс будет в регистре на Хеш
|
|||
142
Вафель
28.04.21
✎
12:02
|
а зачем дополнительный регистр?
|
|||
143
Кирпич
28.04.21
✎
12:02
|
(141) Да нафиг хеш. Просто строковое поле в регистре. Только ужатое до 150 байт и всё. Чтобы хеши не считать
|
|||
144
Garykom
гуру
28.04.21
✎
12:03
|
||||
145
H A D G E H O G s
28.04.21
✎
12:05
|
(142) Если мы добавим UID в справочник - мы сразу увеличим его на 16+16*1.2 байт на элемент для всех элементов, даже не подлежащих архивации. Это же не строковый реквизит, который 0 байт, когда он пуст.
|
|||
146
Кирпич
28.04.21
✎
12:05
|
Типа было
$0070 0071 0072 0065 стало $7071 7265 КодСимвола($7071) + КодСимвола($7275) |
|||
147
H A D G E H O G s
28.04.21
✎
12:06
|
(146) А давай ты это сделаешь и продемонстрируешь, а я посмотрю на это?
|
|||
148
Вафель
28.04.21
✎
12:07
|
(145) те хэш ты на для всех вычисляешь? а как поиск марки будет выполняться для незахэшированных?
|
|||
149
mistеr
28.04.21
✎
12:08
|
(144) Колеса не каноничной формы.
|
|||
150
sitex
naïve
28.04.21
✎
12:10
|
(146) И что ? Будет $0070 7001 0072 0065 или $0070 0701 0702 0605 Дубль ?
|
|||
151
Garykom
гуру
28.04.21
✎
12:10
|
(149) По канону я тоже умею
Например тупо марку перевожу в несколько УИДов и храню в РС в измерениях |
|||
152
Garykom
гуру
28.04.21
✎
12:10
|
(151)+ Перевожу без хеширования
|
|||
153
Кирпич
28.04.21
✎
12:10
|
(147) А мне это зачем? Ты же научные изыскания проводишь. Я тебе предлагаю вариант. Может оно быстрее работать будет, а места занимать меньше.
|
|||
154
Garykom
гуру
28.04.21
✎
12:11
|
150 символов = УИД1+УИД2+УИД3+...
Это измерения будут А Ресурс что хошь |
|||
156
H A D G E H O G s
28.04.21
✎
12:12
|
(148) (148) По коду, по 150 символам. Поиск нужен при загрузке входящей ТТН и при сканировании на ТСД.
При загрузке входящей ТТН с признаком Возврат буду еще искать и по хешу, при сканировании на ТСД - искать по коду, если не нашел - тогда по хешу. |
|||
157
Кирпич
28.04.21
✎
12:13
|
(150) Ты ничо не понял
|
|||
158
sitex
naïve
28.04.21
✎
12:14
|
(157) понял как (137) написал
|
|||
159
H A D G E H O G s
28.04.21
✎
12:16
|
(153) Мне нет резона рассматривать этот вариант. Я просто переведу строку в однобайтную и сохраню ее через Поток в ХранилищеЗначений.
|
|||
160
Garykom
гуру
28.04.21
✎
12:17
|
(159) что думаешь на (154)? идею понял?
|
|||
161
Почему 1С
28.04.21
✎
12:19
|
Интересно почему MS SQL server не поддерживает UTF-8 вместо юникода, это же самая оптимальная кодировка для строк.
|
|||
162
Ёпрст
28.04.21
✎
12:23
|
(138) АрхивДанныхМарки..это строка 150 пожатая в хранилище ?
|
|||
163
Ёпрст
28.04.21
✎
12:24
|
Так то идея понятна..ищем в наименовании, если дырка, преобразуем в хешь ищем в РС.. так ?
|
|||
164
H A D G E H O G s
28.04.21
✎
12:27
|
(163) Воистену!
|
|||
165
H A D G E H O G s
28.04.21
✎
12:27
|
(162) Да. Но не пожатая. Просто 150 символов в 150 байт.
Жать коды марок - неэффективно. |
|||
166
Вафель
28.04.21
✎
12:30
|
можно же еще съэкономить 1 байт больше 1 символа из кода
|
|||
167
Ёпрст
28.04.21
✎
12:30
|
Посмотрел у себя.. 55млн, ~22гига (данные+индекс)
|
|||
168
H A D G E H O G s
28.04.21
✎
12:33
|
(167) хранится в 1С? У меня еще в коде справочника лежит 19 символов алкокода (38 байт данных+38*1.2 байт на индекс). Его тоже под нож.
|
|||
169
Ёпрст
28.04.21
✎
12:41
|
(168) да, в 1с .. база на скуле..
А так, не проще пожать, чем в уид преобразовывать ?
©Спиз@но с нимфостарта |
|||
170
Вафель
28.04.21
✎
12:43
|
а зачем хранилище в строку преобразовывать?
|
|||
171
H A D G E H O G s
28.04.21
✎
12:45
|
(169) Не жмется код марки.
Даже если их собрать единный блок из 10000 марок - тогда коэффициент сжатия будет 50% и то с bzip2, который умеет предварительно сортировать данные. Мне лениво таким заморачиваться. |
|||
172
Ёпрст
28.04.21
✎
12:52
|
(171) ясна, надо потестить..
Пока не критично. У меня РС с марками пока больше весит, чем сам справочник марок, ибо индекс покрывающий много весит. Думаю, от чего бы избавиться. Тоскливо планы опять мониторить и собирать статистику использования индексов. |
|||
173
H A D G E H O G s
28.04.21
✎
12:55
|
(172) Да, у меня на 2 ом месте РС. Но там уже не от чего не избавиться.
Сколько времени убито на вылизывания взаимоблокировок и попадания в индексы - я его ни за что уже не трону. |
|||
174
H A D G E H O G s
28.04.21
✎
12:56
|
(172) Ну и все списанное через несколько дней сбрасывается во 2 РС, там с индексами попроще.
|
|||
175
sitex
naïve
28.04.21
✎
12:56
|
(171) Для одной марки применить Арифметическое кодирование. :)
|
|||
176
H A D G E H O G s
28.04.21
✎
12:57
|
(175) Свой алфавит, вы об этом?
|
|||
177
H A D G E H O G s
28.04.21
✎
13:06
|
Мдацкое ХранилищеЗначений сериализует мои 150 байт в 233 байта при сохранении без сжатия и в 216 байт при сжатии.
Наверное надо будет делать блоки марок. |
|||
178
sitex
naïve
28.04.21
✎
13:06
|
(176) я в смысле применить эту методику кодирования к 1 марке. Возможно будет эффект
|
|||
179
Garykom
гуру
28.04.21
✎
13:11
|
(177) Нахер?
Ты можешь просто взять свои 150 символов и поделить их на нужное число УИД каждый по 36 Тупо превратить их в УникальныйИдентификатор и заюзать как измерения в РС, в ресурс пиши 1 |
|||
180
sitex
naïve
28.04.21
✎
13:12
|
(178) + из 50 символов ,все равно будут повторения последовательностей символов, по этому можно их посчитать.
|
|||
181
sitex
naïve
28.04.21
✎
13:12
|
+(180) *150 символов
|
|||
182
H A D G E H O G s
28.04.21
✎
13:13
|
(181) Нет там повторений, иначе их сжатие по словарю нормально бы сжимали.
|
|||
183
Dzenn
гуру
28.04.21
✎
13:14
|
Могу предложить радикальное решение твоей проблемы с хэшами, MD5 и UUID — не работай на "алкоголиков", "табачников" и прочих распространителей наркоты.
|
|||
184
sitex
naïve
28.04.21
✎
13:15
|
(182) Давай пример 150 символов
|
|||
185
H A D G E H O G s
28.04.21
✎
13:17
|
(183) Это интересно.
|
|||
186
H A D G E H O G s
28.04.21
✎
13:17
|
(184)
233300070266990119001TKU362V3E6AH5VNFAUTTF4X7IUTSAACSQG4MRFW4UYWIWQITOCBXZWG63SPFTFPUFDTJS6QKSRYQ4I4MRKIBH34F6FQHDCOJASAGVHP3LGMUDD3TG3K62BFAQZ5QKR5OQ |
|||
187
Kongo2019
28.04.21
✎
13:18
|
(186) Криптохвост он в поиске как бы не сильно нужен. Может отбросит?
|
|||
188
sitex
naïve
28.04.21
✎
13:20
|
(186) Ну и как нет, есть. Видать вы не поняли выше коммент о чем я имею ввиду.
|
|||
189
H A D G E H O G s
28.04.21
✎
13:21
|
(187) Я думал об этом, но мне стало лениво морочаться со старой и новой маркой.
|
|||
190
H A D G E H O G s
28.04.21
✎
13:21
|
(188) Приведите конкретнее пример.
|
|||
191
Kongo2019
28.04.21
✎
13:23
|
(189) Мне проще, я производство, у меня только новая.
|
|||
192
sitex
naïve
28.04.21
✎
13:25
|
(186) Уникальных - 35 , Текст = 2307691TKUVEAH5NF4XISCQGMRWYOBZPDJLG ,
Сим Кол 3 10 f 9 6 8 t 8 q 8 0 7 |
|||
193
sitex
naïve
28.04.21
✎
13:26
|
(192) + потому сюда частотные интервалы, и т.д.
|
|||
194
sitex
naïve
28.04.21
✎
13:26
|
+ (192) Сим, и кол. не все в сообщение вошли
|
|||
195
sitex
naïve
28.04.21
✎
13:28
|
(194) + это очень в сильно кратко, много чего упущено
|
|||
196
ptiz
28.04.21
✎
13:32
|
Раз начали меряться:
у меня уже 120 млн. кодов упаковок лекарств в системе в виде справочника - это 100Гб. Столкнувшись с кодами, отличающимися только регистром символов (руки оторвать бы архитектору в ЦРПТ, который придумал такую возможность), влепил строку 50 символов под Base64Строка(КодУпаковки). Но у меня в справочник и без того 15 реквизитов. К концу года ожидаю 400Гб только таблицу упаковок. |
|||
197
H A D G E H O G s
28.04.21
✎
13:33
|
(196)
"Столкнувшись с кодами, отличающимися только регистром символов (руки оторвать бы архитектору в ЦРПТ, который придумал такую возможность)," Люто плюсую. |
|||
198
sitex
naïve
28.04.21
✎
13:35
|
(196) Не хило вас прет)
|
|||
199
H A D G E H O G s
28.04.21
✎
13:36
|
Архитектору ЦРПТ, мы, конечно, поставим отдельную песню:
https://youtu.be/7GPmw7LhE3M |
|||
200
H A D G E H O G s
28.04.21
✎
13:37
|
(196) Типовой "ШтрихкодыУпаковокТоваров"?
Мои соболезнования. |
|||
201
ptiz
28.04.21
✎
13:44
|
(200) Нет, у нас ничего типового нет. Своё, но всё надо.
|
|||
202
Kongo2019
28.04.21
✎
13:58
|
В типовых там вообще реализацию на тестировали на скорость, десять записей на тесте они что-ли гоняют.
|
|||
203
Кирпич
28.04.21
✎
13:58
|
(147) //А давай ты это сделаешь и продемонстрируешь, а я посмотрю на это?
|
|||
204
ptiz
28.04.21
✎
14:02
|
(5) "Ушедшие марки я хочу архивировать" - а ссылки на них в виде чего остаются?
Что такое "марка" сейчас? Строка? Ссылка на справочник? У меня тоже будет задача удалять старые упаковки, но задача упирается в логическую модель: - будут битые ссылки в документах, а чтобы удалить документ - придется делать свертку с "вводом остатков" (документ двигает регистр сведений - историю движений упаковки). А ввод остатков по сотням миллионов упаковок .... но куда деваться. Архивировать старые упаковки смысла не вижу - всё равно они проданы. Правда, у меня есть вторая база - промежуточная между основной и ЦРПТ, там можно будет старую историю найти. |
|||
205
Кирпич
28.04.21
✎
14:03
|
+(203)Теперь можно тупо в регистр сведений. 150 байт съэкономили. Индекс есть. Хеши вычислять не надо.
|
|||
206
H A D G E H O G s
28.04.21
✎
14:03
|
(203) Епстественно я это попробовал.
Когда сохранишь строку в БД она станет размером в 300 байт |
|||
207
Кирпич
28.04.21
✎
14:04
|
(206) поставь размер поля 75. задолбал
|
|||
208
Кирпич
28.04.21
✎
14:05
|
и будет 150
|
|||
209
H A D G E H O G s
28.04.21
✎
14:11
|
(207) Я с вами вежливо общаюсь, но похоже, абсолютно зря. Идите ка вы лесом.
|
|||
210
Кирпич
28.04.21
✎
14:12
|
(209) Ладно не обижайся. Я ж любя.
|
|||
211
H A D G E H O G s
28.04.21
✎
14:14
|
(210) Давай ты сохранишь в примитивнейший справочник строку в 1 байт через 1С.
|
|||
212
Кирпич
28.04.21
✎
14:15
|
(211) И нахрена?
|
|||
213
Почему 1С
28.04.21
✎
14:17
|
(203) Исходная строка "0123456789" - 10 байт, сжимаем - "㌲㔴㜶㤸" - 10 байт,
отличное сжатие я считаю |
|||
214
Вафель
28.04.21
✎
14:19
|
(213) исходная строка 20 байт
|
|||
215
H A D G E H O G s
28.04.21
✎
14:19
|
(212) Чтобы понять, что решение нерабочее.
|
|||
216
Вафель
28.04.21
✎
14:20
|
(215) почему нерабочее то?
|
|||
217
Почему 1С
28.04.21
✎
14:20
|
(214) В 1С 10 байт, а в SQL да 20, понял фишку приема.
|
|||
218
Вафель
28.04.21
✎
14:21
|
(217) в 1с 10 - СИМВОЛОВ
|
|||
219
Кирпич
28.04.21
✎
14:22
|
(215) а (217) уже понял
|
|||
220
Кирпич
28.04.21
✎
14:22
|
почти :)
|
|||
221
Кирпич
28.04.21
✎
14:22
|
(215) так почему не работает?
|
|||
222
Почему 1С
28.04.21
✎
14:23
|
(218) 10 символов из пределов ASCII = 10байт в UTF-8, в SQl согласен 10 символов = 20 байт, а закодированных 5 символов = 10 байт, смысл есть
|
|||
223
Garykom
гуру
28.04.21
✎
14:24
|
Марки имеют ограниченный набор символов же!
Можно сжимать использую кириллицу |
|||
224
Garykom
гуру
28.04.21
✎
14:24
|
(221) Ты про это (223) ранее писал?
|
|||
225
mistеr
28.04.21
✎
14:28
|
(196) >руки оторвать бы архитектору в ЦРПТ
Может, лучше архитектору платформы? |
|||
226
Garykom
гуру
28.04.21
✎
14:29
|
(225) На ЦРПТ зря бочку катят там вполне продумано и хорошо по сравнению с ЕГАИС
|
|||
227
Garykom
гуру
28.04.21
✎
14:30
|
(226)+ А реализация в конфах 1С это к ЦРПТ никак не относится
|
|||
228
Ёпрст
28.04.21
✎
14:30
|
(226) Да-да..завести кучку левого и продать, очень хорошо в цтрп придумали.
|
|||
229
Ёпрст
28.04.21
✎
14:31
|
И пока эти дыры не прикрыты, никак
|
|||
230
Ёпрст
28.04.21
✎
14:31
|
А ждать ответа годами..
|
|||
231
Ёпрст
28.04.21
✎
14:31
|
не, нам такого счастья не нать
|
|||
232
Вафель
28.04.21
✎
14:34
|
(222) можно и сильнее сжать ибо там всего 36 символов
|
|||
233
Garykom
гуру
28.04.21
✎
14:34
|
(228) Т.е. ты жалуешься что еще не все дыры прикрыты?
Не волнуйся постепенно дойдет что воровать станет дороже чем не воровать |
|||
234
Кирпич
28.04.21
✎
14:55
|
Продолжаем изыскания. Забил в гугл переводчик урезаную марку. Вот результат:
㌵㌳〰 㜰 ㈰ 㘶 㤹 啋 насмешка 唳 䄶 㕈 兆 рвота 噔 夷 рвота 㜰 ㈰ 㘶 㤹 писк 啋 㘳 перед уходом |
|||
235
Кирпич
28.04.21
✎
14:56
|
что то алкогольное в этом есть
|
|||
236
Кирпич
28.04.21
✎
14:58
|
И "перед уходом" тоже в тему. Ухожу с 1 мая на cdj,jlyjt бомжевание в связи с увольнением :))
|
|||
237
Garykom
гуру
28.04.21
✎
15:03
|
(236) Меня в отпуск даже не пускают...
|
|||
238
Кирпич
28.04.21
✎
15:05
|
Китайский регистр сведений. всё работает, HADGEHOGs. Одно измерение в 75 символов
https://ibb.co/hZKmPS1 |
|||
239
H A D G E H O G s
28.04.21
✎
15:06
|
(238) Все, я вкурил.
Да, это работает. |
|||
240
H A D G E H O G s
28.04.21
✎
15:06
|
Признаю свою ошибку перед Кирпич. Его метод позволяет сохранить строку так, как мне надо.
|
|||
241
Кирпич
28.04.21
✎
15:07
|
(237) Да нафиг щас отпуск. Ковид. Копим деньги, сидим дома
|
|||
242
H A D G E H O G s
28.04.21
✎
15:08
|
Теперь получается все достаточно легко сделать без своих blob структур
|
|||
243
Кирпич
28.04.21
✎
15:09
|
(240) Нифига ты правильный какой :) (239) вполне достаточно
|
|||
244
H A D G E H O G s
28.04.21
✎
15:14
|
Блин, хоть бери и преобразовывай все марки
|
|||
245
Garykom
гуру
28.04.21
✎
15:31
|
Извращенцы зачем вам китайский когда можно просто строку из 150 символов разбить на уиды по 36?
последний дополнить 0 |
|||
246
Почему 1С
28.04.21
✎
15:33
|
(244) Я только не понял, почему в Хранилище значений из 150 байт получилось вдруг 230. Откуда столько лишних байтов.
|
|||
247
H A D G E H O G s
28.04.21
✎
15:35
|
(246) Сериализация.
|
|||
248
Garykom
гуру
28.04.21
✎
15:37
|
(246) Там как строка по сути хранится в base64 вроде бы
|
|||
249
Garykom
гуру
28.04.21
✎
15:40
|
(0) В конечном итоге один хрен придется на внешнее (относительно 1С) хранение перейти!
|
|||
250
ptiz
28.04.21
✎
15:42
|
Вот что бы мы все делали без маркировки? А тут работы привалило! :)
|
|||
251
Kongo2019
28.04.21
✎
15:42
|
(250) Нам и без маркировки есть чем заняться.
|
|||
252
Ёпрст
28.04.21
✎
16:36
|
(244) Но... наименование удалять всё равно будешь и РС новый лепить ?...
Или просто наименование на китайщину поменяешь ? :) |
|||
253
Ёпрст
28.04.21
✎
16:36
|
В принципе, замена на китайщину уже в 2 раза меньше размер.
|
|||
254
H A D G E H O G s
28.04.21
✎
16:36
|
(252) Наименования чистить. Индекс же.
|
|||
255
Ёпрст
28.04.21
✎
16:42
|
(254) да, но если не чистить, а тупо китайщиной заменить, то в 2 раза пожмётся и так.
А в менеджере справочника в представлении уже подменять китайщину на нужное.. и всё красиво - на экране норм шк, в базе китайщина, и без РС |
|||
256
H A D G E H O G s
28.04.21
✎
16:42
|
(255) Ну да, но это полумеры.
|
|||
257
aka MIK
28.04.21
✎
17:12
|
(245) а 1С даст запихнуть в УИД любую неформатную хрень?
|
|||
258
H A D G E H O G s
28.04.21
✎
17:16
|
(257) Вроде дает.
|
|||
259
aka MIK
28.04.21
✎
17:20
|
(206) поставь фиксированную длину строки - будет nchar(150), а это 150 байт
|
|||
260
aka MIK
28.04.21
✎
17:22
|
А нет, обманули )
|
|||
261
aka MIK
28.04.21
✎
17:29
|
Но 2 байта можно сэкономить )
|
|||
262
victuan1
29.04.21
✎
06:57
|
(239) А если усовершенствовать "метод Кирпича", то можно строку сократить не до 75 символов, а до 38! ;)
|
|||
263
victuan1
29.04.21
✎
07:01
|
(192) "Уникальных - 35 , Текст = 2307691TKUVEAH5NF4XISCQGMRWYOBZPDJLG"
Нет, всего 23 символа, начиная с 9-го, писал об этом в (58). |
|||
264
Kongo2019
29.04.21
✎
08:17
|
(262)И как?
|
|||
265
victuan1
29.04.21
✎
08:31
|
(264) Емкость алфавита алкомарки 36 символов (10 цифр + 26 лат. букв).
Емкость 1 байта = 255. 256 / 36 = 7,1111. Следовательно в одном байте (символе) можно хранить 7 символов алкомарки. Длина алкомарки = 150 символов. Следовательно, для хранения одной марки требуется 150 / 7 = 22 байта. в 1с8 можно хранить в виде "китайского" алфавита по "методу Кирпича" в строке длиной 2*22 символа (выше я немного ошибся, написал 38). |
|||
266
Вафель
29.04.21
✎
08:46
|
(265) получается что делаем хэш на 16 байт от данных на 22 байта
|
|||
267
timurhv
29.04.21
✎
09:14
|
(196) "Столкнувшись с кодами, отличающимися только регистром символов (руки оторвать бы архитектору в ЦРПТ, который придумал такую возможность),"
А что делать, если у молочки только 5 символов в серийном? Это только 656млн марок на одну продукцию без верхнего регистра, а с ним почти 4млн. |
|||
268
timurhv
29.04.21
✎
09:14
|
(267) *4млрд
|
|||
269
Garykom
гуру
29.04.21
✎
09:18
|
(266) дык написать свой https://ru.wikipedia.org/wiki/Base64
на основе символов в марках |
|||
270
victuan1
29.04.21
✎
09:19
|
(265) Ой, я лажу написал. Надо же не делить, а вычислять логарифм по основанию 2.
Получается для 36 символьного алфавита нужно 6 бит с избытком, значит строку в 150 символов можно хранить в 114 байтах. |
|||
271
Garykom
гуру
29.04.21
✎
09:20
|
(269) к (265)
|
|||
272
Garykom
гуру
29.04.21
✎
09:21
|
(270) Не так считаешь, там просто не в байтах хранение а в битах
|
|||
273
victuan1
29.04.21
✎
09:22
|
(267) ну да в битах: 150 симв. * 6 бит = 900 бит
Что примерно равно = 113 байтов (900 / 8) |
|||
274
Garykom
гуру
29.04.21
✎
09:22
|
(272)+ в смысле 36 это не 6 бит ровно а дробное и можно это дробное для следующего символа алфавита использовать
|
|||
275
victuan1
29.04.21
✎
09:23
|
(274) Об этом тоже думал, но экономия будет не соизмерима со сложностью алгоритма.
|
|||
276
victuan1
29.04.21
✎
09:24
|
(274) Если так рассуждать, то и до алгоритмов сжатия дойдем))
|
|||
277
ptiz
29.04.21
✎
09:25
|
(267) В лекарствах - 13. Вопрос к тем, кто такое придумал. Зато у вас криптохвоста нет. Как жить без него будете - не представляю :)
|
|||
278
Garykom
гуру
29.04.21
✎
09:25
|
(276) угу по Шеннону
|
|||
279
Garykom
гуру
29.04.21
✎
09:25
|
(277) в МДЛП криптохвост есть но он только в печатном виде в обменах не участвует
|
|||
280
Garykom
гуру
29.04.21
✎
09:28
|
(278)+ ли все же Хаффману?
|
|||
281
Garykom
гуру
29.04.21
✎
09:30
|
(280)+ хотя правильней https://ru.wikipedia.org/wiki/Asymmetric_numeral_systems
|
|||
282
fisher
29.04.21
✎
09:40
|
Действительно. Если паковать в 22 байта, то хешировать смысла нет. И можно будет это засунуть в 11-символьную китайскую строку :)
|
|||
283
fisher
29.04.21
✎
09:43
|
Хотя стоп. Не. В 11-символьную не засунешь.
|
|||
284
fisher
29.04.21
✎
09:49
|
Что-то вы намутили с китайскими UTF. Там же еще номер страницы сидит плюс китайские символы до 4 байтов могут занимать.
Напрашивается в два уида кодировать. И хрен с ним с хвостиком. |
|||
285
fisher
29.04.21
✎
09:54
|
Стоп. Зачем уид? А сколько в базе займет тупо 4 разрядное целое?
|
|||
286
fisher
29.04.21
✎
09:58
|
Не, это я гоню.
|
|||
287
Garykom
гуру
29.04.21
✎
10:13
|
(284) разбивать на уиды я предложил еще хз когда
|
|||
288
fisher
29.04.21
✎
10:19
|
(287) Просто практичнее всего таки использовать байт на символ, а это дохрена уидов получается. Идея в (203) очень привлекательная, но у меня есть подозрения, что не взлетит. То есть преобразования в 75 строку туда и обратно могут происходить с потерей данных.
|
|||
289
H A D G E H O G s
29.04.21
✎
10:21
|
(263) Очень странно судить по алфавиту марки, опираясь на один пример.
|
|||
290
fisher
29.04.21
✎
10:25
|
В принципе, еще достаточно практично получится пихать 3 символа в два байта. То есть упаковать в 100 байт.
Если уидами без хеширования, то это 7 уидов. Тоже как-то несподручно. |
|||
291
victuan1
29.04.21
✎
10:45
|
(289) То есть? Я опираюсь не на один пример, а на знания того как устроена алкомарка.
|
|||
292
H A D G E H O G s
29.04.21
✎
11:02
|
(291) Ок. Я просто подумал, что вы написали, исходя из сообщений выше.
|
|||
293
victuan1
29.04.21
✎
11:07
|
(292) Вот регулярное выражение для проверки алкомарок всех типов (150, 68 и 40 (очень древних) символьных):
([1-9]\d{2}|\d([1-9]\d|\d[1-9])){2}([1-9]\d{7}|\d([1-9]\d{6}|\d([1-9]\d{5}|\d([1-9]\d{4}|\d([1-9]\d{3}|\d([1-9]\d{2}|\d([1-9]\d|\d[1-9])))))))(0[1-9]|1[0-2])(1[8-9]|[2-9][0-9])([1-9]\d{2}|\d([1-9]\d|\d[1-9]))[0-9A-Z]{129}|\d\d[a-zA-Z0-9]{21}\d[0-1]\d[0-3]\d{10}[a-zA-Z0-9]{31}|[0-9]{40} Как видим разрешены только A-Z0-9 - т.е. алфавит 36 симв. |
|||
294
Вафель
29.04.21
✎
11:25
|
(284) могут и занимать по 4, но мы же берем только те что по 2 байта.
мы же не переводим человеческий язык |
|||
295
Вафель
29.04.21
✎
11:29
|
несколько гуидов - это не очень хорошо, ибо нужно рс городить для поиска
|
|||
296
Garykom
гуру
29.04.21
✎
11:39
|
(295) РС быстрее чем справочник и очень удобно
|
|||
297
Garykom
гуру
29.04.21
✎
11:40
|
(296)+ Точнее неудобно что идентификатора нет и в другие объекты в реквизит ссылку не засунешь
Но в задаче это не особо надо |
|||
298
Вафель
29.04.21
✎
11:42
|
(297) а где хранить марки привязанные к документам?
там же эти составные уиды и хранить? |
|||
299
Garykom
гуру
29.04.21
✎
11:44
|
(298) Дополнительное измерение ведущее в РС, там уид, этот уид в документах
|
|||
300
Garykom
гуру
29.04.21
✎
11:44
|
300
|
|||
301
fisher
29.04.21
✎
11:53
|
(300) Подставляешься
|
|||
302
Ёпрст
29.04.21
✎
12:35
|
(292) полученные данные о китайщине, как будешь использовать ? Всё равно, марки без наименованием с реквизитом-хранилище и в РС - китайщина как хеш индексированная ?
|
|||
303
H A D G E H O G s
29.04.21
✎
12:48
|
(302) Хеш буду брать из исходной строки.
Сейчас я прогоняю тест на 15 млн. Марка->Китаещина->МаркаВосстановленная И сравниваю Марка и МаркаВосстановленная Потом из этих 15 млн составлю алфавит и сделаю свой код, который сохраню в китаещину. Алфавит буду делать, если производительность будет норм. |
|||
304
Вафель
29.04.21
✎
12:49
|
зачем нужен хэш тогда?
|
|||
305
H A D G E H O G s
29.04.21
✎
12:51
|
(304) Посмотрим на алфавит и скорость конвертации, может и не нужен.
|
|||
306
Вафель
29.04.21
✎
12:55
|
можно не 7 символов пихать, а 256/64 = 4.
тогда алгоритм будет существенно проще |
|||
307
H A D G E H O G s
29.04.21
✎
13:12
|
(306) не понял
|
|||
308
victuan1
29.04.21
✎
13:36
|
(306) мой пост (265) неверный. Не нужно на него опираться.
|
|||
309
fisher
29.04.21
✎
13:53
|
(307) А ты уже протестил (203)? Оно работает корректно туда-обратно на твоей выборке (на строке в 75 символов)?
|
|||
310
fisher
29.04.21
✎
13:57
|
Я просто я не уверен, как ведет себя конвертация для участков кодов символов которые неопределены или зарезервированы. Не похерятся ли они при конвертации туда и обратно.
|
|||
311
Ivan_495
29.04.21
✎
14:07
|
я бы создал таблицу в sql базе 1с и работал бы с ней средствами ado из 1с.
|
|||
312
Ёпрст
29.04.21
✎
14:11
|
(309) я проверил на паре мультов, норм. На 55 1с-ина сваливается в недостатке памяти для выполнения запроса..
|
|||
313
H A D G E H O G s
29.04.21
✎
14:15
|
(309) На 10000 марок нормально работает
|
|||
314
fisher
29.04.21
✎
14:50
|
(304) Хэш может пригодиться разве что для экономии места на диске за счет уменьшения размера индекса.
(312)(313) Здорово. Кирпичу респект. И как все-таки оптимально сжимать? Если алфавит в 36 знаков, то ничего умнее чем кодировка 3 символов в два байта мне не приходит. То есть бить на группы по 3 символа, интерпретировать их как трех-разрядное число число в 36-ричке и писать в два байта. Тогда можно будет уложиться в 50 "китайских" символов. |
|||
315
Garykom
гуру
29.04.21
✎
14:52
|
(314) Самое оптимальное сжатие (с точки зрения размера) это https://habr.com/ru/post/190202/
|
|||
316
fisher
29.04.21
✎
14:54
|
(315) Не. Речь про 1С. Простота и скорость преобразования тоже важны.
|
|||
317
fisher
29.04.21
✎
15:00
|
(315) И с чего ты решил что это будет оптимальное сжатие с точки зрения размера? Там номер позиции может превысить размер данных :)
|
|||
318
Garykom
гуру
29.04.21
✎
15:05
|
(317) Номер позиции число - дальше хрен сожмешь
|
|||
319
Garykom
гуру
29.04.21
✎
15:07
|
(314) >как все-таки оптимально сжимать?
Имхо вопрос не имеет ответа ибо у всех разное понимание оптимально. Мое мнение тут не имеет смысла сжимать и хранить в базе 1С. Храним в любой внешней СУБД и все. |
|||
320
fisher
29.04.21
✎
15:09
|
(319) > Храним в любой внешней СУБД и все.
Ага. Пытаешься уйти от ответа. Переформулируем. Как бы ты сжимал это в любой внешней СУБД для минимизации размера базы? |
|||
321
ptiz
29.04.21
✎
15:51
|
(203) Проверил на первом попавшемся коде упаковки лекарств: 000000460026861000AAGRN8AGV
Восстановилось криво. Кто-то еще может проверить? |
|||
322
Вафель
29.04.21
✎
15:52
|
(321) у тебя длина нечетная
|
|||
323
Кирпич
29.04.21
✎
15:54
|
(321) прилепи нолик и упаковывай. распаковывай и отлепи нолик
|
|||
324
Кирпич
29.04.21
✎
15:55
|
да и смысла нету на таких коротких кодах
|
|||
325
ptiz
29.04.21
✎
15:56
|
Да, теперь норм.
|
|||
326
H A D G E H O G s
29.04.21
✎
15:57
|
Лучше Пробел
|
|||
327
H A D G E H O G s
29.04.21
✎
15:58
|
36 символов можно закодировать 6 битами, тоесть экономия 2 бита на символ, 25%. Нахрен надо такие радости.
|
|||
328
ptiz
29.04.21
✎
16:05
|
(327) Смотря какие символы. Там же могут быть в разных регистрах + спецсимволы.
|
|||
329
H A D G E H O G s
29.04.21
✎
16:07
|
(328) Это алкоголь. У нас нет таких радостей.
|
|||
330
Garykom
гуру
29.04.21
✎
16:18
|
(320) >> Храним в любой внешней СУБД и все.
>Ага. Пытаешься уйти от ответа. Переформулируем. Как бы ты сжимал это в любой внешней СУБД для минимизации размера базы? Никак! Тупо выбрал бы правильно внешнюю БД, например которая умеет сжимать по дефолту |
|||
331
Garykom
гуру
29.04.21
✎
16:19
|
(330)+ Сцуко вы еще предложите свой архиватор написать со своей файловой и операционной системой ля
|
|||
332
fisher
29.04.21
✎
16:20
|
(327) Ну, я привел пример 33% экономии :) Да и на таких объемах "даже немножечко, чайная ложечка - это уже хорошо" (с)
В теории еще байта три можно сэкономить, но какой ценой... |
|||
333
fisher
29.04.21
✎
16:23
|
(330) Вариант. Жаться оно должно хорошо...
|
|||
334
H A D G E H O G s
29.04.21
✎
16:24
|
(333) нет. я уже писал выше
|
|||
335
fisher
29.04.21
✎
16:29
|
(334) Что - "нет"? В СУБД же не обязательно построчно жать.
|
|||
336
Garykom
гуру
29.04.21
✎
16:34
|
(330)+ https://db-engines.com/en/ranking/key-value+store
Тупо полные марки писал бы во внешнюю БД, с уид как ключ В конфе 1С использовал этот ключ-уид где нуна |
|||
337
H A D G E H O G s
29.04.21
✎
16:45
|
||||
338
fisher
29.04.21
✎
16:47
|
(337) Не нужны мне твои марки :) Я на слово поверю. Они там что, изначально как из рандомайзера выходят?
|
|||
339
Вафель
29.04.21
✎
16:48
|
(338) криптохвост же
|
|||
340
Кирпич
29.04.21
✎
16:50
|
(336) в этих key-value+store еще надо найти такую, которая не in memory
А то запихнешь туда 10 гигов и комп остановится нахрен sqlite CREATE TABLE Marks (mark TEXT PRIMARY KEY) и хватит |
|||
341
fisher
29.04.21
✎
16:51
|
(339) А, блин. Я просто не в курсах. Да, он там больше половины кода. Тогда извиняюсь.
|
|||
342
Вафель
29.04.21
✎
16:51
|
(340) sqlite? как внешнее хранилище?
|
|||
343
Кирпич
29.04.21
✎
16:54
|
Или тупо в текстовых файлах хранить отсортированных. Двоичный поиск и сё такое.
Если конечно их искать редко будут |
|||
344
Вафель
29.04.21
✎
16:54
|
(343) кластерный индекс же
|
|||
345
fisher
29.04.21
✎
17:05
|
Так а какой смысл выносить его во внешнюю? Как его идентифицировать из 1С? Где плюсы, кроме минусов?
|
|||
346
Garykom
гуру
29.04.21
✎
17:07
|
(345) в 1С оно идентифицируется по УИД
|
|||
347
Garykom
гуру
29.04.21
✎
17:08
|
(346)+ Плюсы что база 1С не пухнет как бешеная при сохранении приемлимой скорости
Это важно для бэкапов, когда они часто и много хрантся Внешнее хранилище легко и быстро (ну это от рук и мозгов зависит да) можно переделать без гребаных переиндексаций |
|||
348
Garykom
гуру
29.04.21
✎
17:09
|
(347)+ В крупных сетевиках эту внешнюю бд для марок делают онлайн одну на все филиалы/отделы/магазины
|
|||
349
Garykom
гуру
29.04.21
✎
17:10
|
В самой базе 1С один есть смысл держать только актуальные марки для товара на остатках в данный момент
Все еще едущее или уже уехавшее/проданное нахрен во внешнюю |
|||
350
fisher
29.04.21
✎
17:12
|
Убедил. Что-то я с гуидом сразу не допер.
|
|||
351
fisher
29.04.21
✎
17:21
|
Может, в самом деле в текстовые файлики складывать.
По датам генерации гуидов. По часу на файлик, скажем. Текущий час - в регистре сведений. Файлики - только на чтение. |
|||
352
fisher
29.04.21
✎
17:22
|
В общем, оперативный буфер - в РС, из которого выгружаться в файлики.
|
|||
353
fisher
29.04.21
✎
17:25
|
Просто отдельное хранилище для этой задачи - это из пушки по воробьям. Как сервис для нескольких потребителей - еще куда ни шло.
А для одной базы плюсы есть, но и минусов хватает. Нужно ж это отдельное хранилище сопровождать. А у них всегда своих приколов хватает. |
|||
354
Garykom
гуру
29.04.21
✎
17:40
|
(353) dbf во всех платформах 1С есть
|
|||
355
Garykom
гуру
29.04.21
✎
17:41
|
(354)+ Если очень очень хочется "в базе" то засунь эту dbf в хранилище
|
|||
356
fisher
29.04.21
✎
17:44
|
Не. Не хочу dbf. Мне файлики нравятся. Я бы на них сделал.
Сделать папочки на день / месяц / год. Надо достать по гуиду - сразу генерится полный путь к нужному файлику. А они там уже по порядку разложены. Можно хоть тем же двоичным поиском строчку находить. Управлять удобно. Перенести старый период на бэкап-сервер в архиве - раз плюнуть. Красота. |
|||
357
Garykom
гуру
29.04.21
✎
17:46
|
(356) не тупи файлики тормоза по сравнению с dbf
на dbf можно из 1С cdx сделать и быстро-быстро будет |
|||
358
Garykom
гуру
29.04.21
✎
17:47
|
(357)+ если один файлик dbf большой то можно их много завести, размер в гиг-два нормально
|
|||
359
fisher
29.04.21
✎
17:48
|
(357) Что-то мне подсказывает, что производительность достаточная будет. Хотя я без понятия в ентих алкомарках и чего с ними вытворяют. Может и ошибаюсь.
|
|||
360
fisher
29.04.21
✎
17:49
|
Главное, что производительность будет линейная. Если уж взлетит, то в пути не упадет.
|
|||
361
fisher
29.04.21
✎
17:51
|
Хотя... Можно же точно также завести по dbf на каждый час :)
Ну, можно. Не придется свой поиск в файле рисовать. |
|||
362
fisher
29.04.21
✎
17:53
|
Хотя места будет больше занимать. А оно же нам важно типа. Может, лучше текст? :)
|
|||
363
fisher
29.04.21
✎
17:57
|
Просто у нас естественным образом "кластерный индекс" получится. Генерить по нему cdx - избыточно.
|
|||
364
Кирпич
29.04.21
✎
18:18
|
Да в sqlite загнать и всё. Там тебе и кластерный индекс и всё шо хош.
|
|||
365
Ёпрст
29.04.21
✎
18:34
|
(364) не поплохеет база в скульлайте от 50-100 мультов марки ?
|
|||
366
Ёпрст
29.04.21
✎
18:34
|
мне лень тестить, были бы клюшки, попробовал бы.
|
|||
367
H A D G E H O G s
29.04.21
✎
18:42
|
Восстановил 15 млн марок.
3 ошибочные на конце вместо 150 символа комбинация эя |
|||
368
H A D G E H O G s
29.04.21
✎
18:42
|
сейчас буду разбираться
|
|||
369
Garykom
гуру
29.04.21
✎
18:46
|
(367) служебные символы попало и обнулило
|
|||
370
H A D G E H O G s
29.04.21
✎
18:56
|
Все, вкурил.
Пустой алкокод у них. Я архивирую как Алкокод;КодМарки 19символов алкокода+1 символ разделителя + 150 символов =170 символов - четное число. 0символов алкокода+1 символ разделителя + 150 символов =151 символов - нечетное число. Добавлю проверку на четность при архивации |
|||
371
Garykom
гуру
29.04.21
✎
19:05
|
Кто в ЕГАИС советую заранее готовиться к тому что все старые марки и алкокоды к черту
И заставят перемаркировать новыми от ЧЗ |
|||
372
Garykom
гуру
29.04.21
✎
19:06
|
(371)+ Остатки понятно перемаркировать, все проданное нафик
Если старые запасы возвращается то перемаркировка |
|||
373
Garykom
гуру
29.04.21
✎
19:10
|
(371) Но это вряд ли раньше чем https://xn--80ajghhoc2aj1c8b.xn--p1ai/business/projects/beer/about-experiment/
Выйдет в продакшен |
|||
374
victuan1
29.04.21
✎
19:17
|
(371) Откуда инфа?
|
|||
375
Кирпич
29.04.21
✎
19:22
|
(365) Так любой субд поплохеет. Ну сделай 20 баз. По 5 гигов на базу нормально будет искать.
|
|||
376
Garykom
гуру
29.04.21
✎
19:26
|
(374) инфа с пива (373)
"Останется только один" ибо кто крепким торгует тот и пивом тоже А юзать две разные "маркировки" дико неудобно |
|||
377
victuan1
29.04.21
✎
20:02
|
(376) Про пиво понятно.
Я про "Кто в ЕГАИС советую заранее готовиться к тому что все старые марки и алкокоды к черту И заставят перемаркировать новыми от ЧЗ". Старые марки на крепком алкоголе - почему заставят его перемаркировать? |
|||
378
Вафель
29.04.21
✎
20:30
|
А кстати в чем отличие акцизных марок (АМ) и федеральных специальных марок (ФСМ)
|
|||
379
Garykom
гуру
29.04.21
✎
20:32
|
(377) а нафига ЧЗ в лице ЦРПТ заморачиваться с этими кривыми старыми марками?
|
|||
380
Garykom
гуру
29.04.21
✎
20:33
|
(379)+ На все экспериментальные так же забивали и заставляли перемаркировать или разрешали без них до окончания срока годности
А у спиртного срок годности тю |
|||
381
H A D G E H O G s
29.04.21
✎
21:26
|
(378) АМ - на импорт, ФСМ - отечественное, но с 2021 теперь все - ФСМ.
|
|||
382
Ёпрст
29.04.21
✎
21:45
|
(373) зачет ага, а в Татарстане уже идет пилот по маркировке пива обычными ФСМ.. как на крепкий алкоголь один в один.
Эти клоуны в правительстве всё пирожок не поделят. |
|||
383
Garykom
гуру
29.04.21
✎
22:08
|
(382) есть такое
|
|||
384
victuan1
29.04.21
✎
22:10
|
(382) Игры чиновников - в Татарстане это просто заградительная мера, чтобы не пустить пиво из других регионов. На всю страну не будет эксперимент Татарстана распространен.
|
|||
385
H A D G E H O G s
29.04.21
✎
22:31
|
6 Гб данных и
8 Гб индекса превратились в 3,3 Гб данных и 1,3 Гб индекса |
|||
386
Ёпрст
29.04.21
✎
22:36
|
(385) неплохо.. это с РС ?
|
|||
387
H A D G E H O G s
29.04.21
✎
22:37
|
(386) нет, это справочник Марок
|
|||
388
Ёпрст
29.04.21
✎
22:37
|
(387) ну.. без наименования ? или наименование - китайщина ?
|
|||
389
H A D G E H O G s
29.04.21
✎
22:40
|
(388) Алкокод+Наименование - в китай, в 170 байтную строку.
Отдельный РС с хешами еще не строил |
|||
390
Ёпрст
29.04.21
✎
22:44
|
(389) я в марках храню не алкокод, а ссылку на справочник алкогольного классификатора. Но, промониторив запросы, нигде это не использую. Вот и думаю, а оно мне вообще надо ? ))) Ну разве что, открыл справочник марки и видишь, че за номенклатура сразу. Хотя, марку, врят ли кто смотрит так.
|
|||
391
Ёпрст
29.04.21
✎
22:44
|
Подумываю, прибить сей реквизит.
|
|||
392
H A D G E H O G s
29.04.21
✎
22:49
|
(390) Полезно иногда ткнуть быстрый отбор в динсписке, но это просто изза лени. У нас гдето в ТСД используется вроде.
|
|||
393
Garykom
гуру
29.04.21
✎
23:45
|
Кстати ТС правильно решил сжимать
Гребаные майнеры, гребаная чиа, hdd и ssd самые большие пропали, а средние и мелкие ценник скакнул |
|||
394
H A D G E H O G s
29.04.21
✎
23:53
|
(393) Ага. Именно под эту новость купил себе в понедельник Sams 980 на 1Тб.
|
|||
395
Garykom
гуру
30.04.21
✎
00:18
|
(394) 1Tb ssd еще можно найти но уже убогие бренды/марки
ssd на 2Tb и более уже хрен найдешь как и hdd >6Tb пропали благо внешние hdd пока есть на 4-5Tb |
|||
396
timurhv
01.05.21
✎
01:20
|
Объясните для тупых (для меня), почему китайская раскладка 1 символ занимает 1 байт в SQL. Я прикладник, хотелось бы углубиться в дебри. Суть обсуждения потерял на 3 странице. Можно просто ссылками на матчасть (вики) закидать, там сам буду разгребать...
|
|||
397
ДедМорроз
01.05.21
✎
01:48
|
Какие байты?
Каждый символ кода марки имеет ограниченное число вариантов. Получается система не по основанию 2,но все равно мы можем последовательность символов перевести в число,а уже число потом перевести в набор байтов (изначально битов). И SQL умеет хранить символы в отличных от двухбайтовых кодировках,просто,это 1с не умеет. Хотя,квалификаторы двоичных данных - это как раз для этого. |
|||
398
ДедМорроз
01.05.21
✎
01:54
|
Кстати,в sms на латинице 160 символов кладутся в 140 байт и никто не считает,что это плохо.
|
|||
399
Вафель
01.05.21
✎
08:26
|
(397) при конвертации из 36 в 256 получаем экономию 30%
Log_256 36 |
|||
400
Кирпич
01.05.21
✎
21:24
|
(396) Всё волшебство в (146)
Китайские буквы получаются случайно |
|||
401
H A D G E H O G s
02.05.21
✎
15:07
|
"Ветерок раскачивает чувств качель
И такая горечь. А любовь моя - печаль-виалончель И на ней хреначит мертвый Ростропович." Я в расстроенных чувствах, короче. 1С вычисляет хеш для 100000 150 символов за 8,6 секунд. Дельфи делает это за 250 мсек. Буду переносить в ВК, наверное. |
|||
402
Garykom
гуру
02.05.21
✎
15:53
|
(401) Потеряешь на передаче в ВК
Выноси уже наружу и хранение |
|||
403
H A D G E H O G s
02.05.21
✎
21:23
|
846 мс с использованием ВК.
Обмен через кусок текста в виде строковой переменной в 100000 строк, разделенного переносами строк 250 мсек - MD5 164 мсек - MD5 в TGUID 26 мсек - разборка входящего текста и сборка исходящего текста и передача в ВК/из ВК 406 мсек - сборка в 1С массива в единый текст и разбор результата в массив и преобразование в УникальныйИдентификатор |
|||
404
ДедМорроз
02.05.21
✎
23:56
|
(401) попробуй тот же самый хэш вычислять,не копируя строки,т.к.тормоза будут как раз на копировании строк.
Я когда md5 на другие языки переписывал (например,на vbscript), как раз с копированием строк боролся,т.к.это самые медленные операции. |
|||
405
Кирпич
03.05.21
✎
11:51
|
(403) Пакуйте хеши в 16 символьный китайкод и будет вам в 1с миллион за 8 сек
|
|||
406
Кирпич
03.05.21
✎
11:54
|
ой. 8 символьный даже
|
|||
407
H A D G E H O G s
03.05.21
✎
11:59
|
(405) гениально!
|
|||
408
Кирпич
03.05.21
✎
12:00
|
(407) А чо. Те же 16 байт, только без лишних движений по склеиванию строк для формирования GUID
|
|||
409
H A D G E H O G s
03.05.21
✎
12:02
|
(408) нет, я наоборот респектую.
|
|||
410
H A D G E H O G s
03.05.21
✎
12:16
|
(408) надо еще понять что будет с нулевым символом
|
|||
411
Кирпич
03.05.21
✎
12:21
|
(410) А что с ним?
|
|||
412
H A D G E H O G s
03.05.21
✎
12:38
|
(411) его наличие обычно трактуется как завершение строки
|
|||
413
Кирпич
03.05.21
✎
12:42
|
(412) Ну да. Два нуля подряд должно быть. А чо попадалось такое?
|
|||
414
Кирпич
03.05.21
✎
12:50
|
(412) А ты попробуй. Сделай какой нибудь FFFF0000AAAA1111
|
|||
415
Кирпич
03.05.21
✎
12:55
|
Всё нормально.
|
|||
416
Кирпич
03.05.21
✎
12:57
|
Только как оно в БД будет не проверял. Может там сюрпрайз от 1с какой нибудь
|
|||
417
Кирпич
03.05.21
✎
12:58
|
Но вряд ли
|
|||
418
Кирпич
03.05.21
✎
13:10
|
Всё работает
|
|||
419
Кирпич
03.05.21
✎
13:12
|
А не. Глючит когда пытаешься справочник посмотреть. Недопустимые символы говорит
|
|||
420
Кирпич
03.05.21
✎
13:14
|
И если символы 00 в конце, то дальше не читает. Но это можно победить принудительным добавлением двух нулей справа
|
|||
421
Кирпич
03.05.21
✎
13:15
|
Хотя нет. С нулями в конце облом будет тоже
|
|||
422
Кирпич
03.05.21
✎
13:24
|
Разве что добавлять FFFF в конце. Но это уже не красиво
|
|||
423
H A D G E H O G s
03.05.21
✎
13:49
|
(419) Ну мы это поле выводить не будем и всё
|
|||
424
Кирпич
03.05.21
✎
13:56
|
Да и без китайкода в виде HEX строки тоже вполне приемлимо. 32 байта.
|
|||
425
Кирпич
03.05.21
✎
13:56
|
Или там 64 получается :))
Мля. Лучше уж в идентификаторах тогда. |
|||
426
Garykom
гуру
03.05.21
✎
15:03
|
Надеюсь вы понимаете что https://i2.paste.pics/6ef1f3ce66bd4cccfb41c2e92a0cb8ae.png
|
|||
427
Кирпич
03.05.21
✎
15:41
|
Да и с идентификаторами нормально работает. Миллион идентификаторов из хешей за 15 сек
|
|||
428
Почему 1С
04.05.21
✎
08:04
|
Про производительность можно даже не задумываться, у вас что там каждый день по миллиону марок уходит, если нет, то на что разница в 10 сек раз в день может повлиять.
|
|||
429
fisher
05.05.21
✎
09:35
|
(396) > Объясните для тупых (для меня), почему китайская раскладка 1 символ занимает 1 байт в SQL
Суть проблемы - нужно эффективно хранить двоичные данные и искать по ним. Но. В 1С нет индексируемых типов для двоичных данных кроме уникального идентификатора. Если писать символьное представление двоичных данных, то размер удваивается, так как в mssql юникодные символы занимают минимум 2 байта (для упрощения обработки UTF-8 там не используется). Поэтому идея была в том, чтобы писать в строку не символьное представление двоичных данных, а непосредственно сами двоичные данные. Берется по два байта двоичных данных, а в строку пишется тот символ, кодом которых эти два байта двоичных данных выступают. При этом часто (но не всегда) получаются символы с иероглифических кодовых страниц (так как их там дохрена). |
|||
430
fisher
05.05.21
✎
09:43
|
Меня этот подход по-прежнему смущает. Что в очень редких случаях, когда получится код суррогатной пары или какой-то зарезервированной области, то могут быть проблемы. Но тесты на реальных данных вроде показывают что такой проблемы нет. Но осадочек все равно висит :)
|
|||
431
Кирпич
05.05.21
✎
10:14
|
(430) Так проверь и спи спокойно. Запиши и прочитай в справочник или в регистр сведений китайкод всех вариантов от '00' до 'ZZ' (в марках вроде кроме латинских буков и цифр ничего не используется)
|
|||
432
Кирпич
05.05.21
✎
10:17
|
код 'ZZ' 23130
23130 символов перебрать |
|||
433
fisher
05.05.21
✎
10:49
|
(431) Согласен. Примерно так бы я и сделал.
|
|||
434
Кирпич
05.05.21
✎
10:50
|
А если брать только буквы и цифры, то там вабще 36*36 и всё читабельное (китай галимый в основном)
|
|||
435
Кирпич
05.05.21
✎
10:51
|
|
|||
436
Кирпич
05.05.21
✎
10:52
|
Глянь в отладчике КитайМассив. Всё читабельное, красивое и китай-тамильское
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |