|
Массив как лучше хранить в базе? | ☑ | ||
---|---|---|---|---|
0
Garykom
гуру
28.01.16
✎
11:39
|
Нужно сохранять в базе 2 больших числовых двумерных массива (до 1000х1000 целых положительных чисел).
Конфа УТ10.3. Где и как оптимальнее его хранить чтобы потом получать быстро? Кроме массивов еще нужно хранить пронумерованный список складов, связанный с этими массивами. Куда его лучше сохранить? Массивы можно засунуть в ХранилищеЗначения, но список туда нежелательно так как ссылки на справочник складов. |
|||
34
Масянька
28.01.16
✎
13:13
|
(32) Каждый склад везде участвует?
|
|||
35
Garykom
гуру
28.01.16
✎
13:14
|
(34) если есть маршруты, склад может участвовать от 0 до 7 раз
|
|||
36
Garykom
гуру
28.01.16
✎
13:15
|
(35)+ чтобы массивы были поменьше полное умножение не делаю, только смотря какие склады отправления и склады назначения
если Склад(Пн) нигде не учавствует то и вершины Склад(1) нет |
|||
37
Фрэнки
28.01.16
✎
13:16
|
(33) Если число полей в одну запись регистра сведений можно поставить фиксировано, то будет удобней в РС сделать.
Если бы было переменное количество значимых значений по строкам массива, то лучше в справочник с переменным числом строк в ТЧ каждого элемента. А просто регистр на регистр для двумерности, но без ссылок на справочник не сделаешь. |
|||
38
Масянька
28.01.16
✎
13:17
|
(36) Ну, куда ты лезешь - поперед батьки? :) Только хотела сказать...
Таблицу маршрутов покажи (как в (32)). |
|||
39
Garykom
гуру
28.01.16
✎
13:18
|
(37) интересная идея, можно технически взять и массив поделить на число складов и их в ТЧ каждого склада
но не хочу таким извратом заниматься это сложность еще вырастает (потеря быстродействия) а из удобства только хранение в базе |
|||
40
Фрэнки
28.01.16
✎
13:19
|
(36) тогда Я бы такое делал на справочнике с ТЧ
|
|||
41
Garykom
гуру
28.01.16
✎
13:19
|
(38) Не могу, оно платное ))
|
|||
42
Garykom
гуру
28.01.16
✎
13:21
|
(40) проблема что алгоритм (http://catalog.mista.ru/public/442306/) только с двумерными массивами работает
и так начальное преобразование проблеммное еще и усложнять? |
|||
43
Фрэнки
28.01.16
✎
13:24
|
(40) о каком быстродействии речь, когда в начале обработки данных ты прочтешь все данные запросом в свою рабочую матрицу и все. А в самом конце, возможно, перезапишешь обратно.
Кстати, может оказаться, что числовые значения окажутся каждый раз только расчетными от изменившихся оперативных состояний складов, а не фиксируемыми. Фиксация, с потерей времени на запись, потребуется только для записи вершин (или узлов, как ты там их у себя называешь, не знаю) |
|||
44
Garykom
гуру
28.01.16
✎
13:25
|
(43) что быстрее
запросом данные в Массив 1000х1000 (10 тысяч записей) прочитать из чего то? или просто из хранилища восстановить? |
|||
45
Фрэнки
28.01.16
✎
13:30
|
(44) наверное, могу ошибаться, хранилище значений умеет работать с полями произвольного размера.
Т.е. для этого объекта нужен доступ к чему-то в СУБД с блоб-полями, которые считываются сразу большими блоками. Затем уже в оперативной памяти разбираются как нужно. |
|||
46
Garykom
гуру
28.01.16
✎
13:32
|
(45) Вот в этом собственно и вопрос :)
Может быстрее будет не массив в хранилище засовывать а каким то иным образом? |
|||
47
Фрэнки
28.01.16
✎
13:33
|
(45) другое дело, что считывание происходит один раз в начале и для юзера будет не критично чтение 10 тысяч записей одним запросом или считывание такого же объема данных из хранилища.
|
|||
48
Фрэнки
28.01.16
✎
13:36
|
(46) такое у меня дежавю, что я где-то в какой-то типовой уже видел использование больших объемов данных именно через хранилище значений
|
|||
49
Garykom
гуру
28.01.16
✎
13:38
|
(47) вот из-за этого у нас с NS и вышел спор,
я утверждал что никакой теоретический алгоритм без напильника низзя напрямую в реальности использовать если бы преобразовать эти 2 массива (1-й по сути длина минимального пути между вершинами АхБ, берется как в таблице умножения, 2-й номер предыдущей вершины этого пути) в "готовые маршруты" то их уже можно было бы как угодно хранить в базе и как угодно получать но это преобразование для такой реальной (с учетом что периодичности маршрутов по времени) тучи складов-вершин слегка затратно |
|||
50
Garykom
гуру
28.01.16
✎
13:38
|
(48) да тоже дежавю, но не на типовую а на ветку тут
|
|||
51
Кирпич
28.01.16
✎
15:08
|
Так сколько складов то в реальности?
|
|||
52
Garykom
гуру
28.01.16
✎
15:11
|
(51) тестовые данные 64 склада, 440 маршрутов
при умножении на 7(дней в неделе) выходит расчет для ~400 вершин с 440 ребрами |
|||
53
Кирпич
28.01.16
✎
15:13
|
(52) и чо надо вычислить?
|
|||
54
Serginio1
28.01.16
✎
15:15
|
(44) Что то у тебя со счетом 1000х1000 будет мульён.
Прочитать из таблицы будет быстрее, но вот запись будет значительно дольше |
|||
55
Garykom
гуру
28.01.16
✎
15:15
|
(52)+ код на 1С считает все минимальные по длине существующие маршруты примерно 5-10 минут, потом получение любого маршрута мгновенно
только осложняется что нужно брать 7 маршрутов и выбрать из них реальный )) Допустим сегодня Чт, 4 день тогда считаем/ищем 7 маршрутов (по кол-ву возможных дней в неделе окончания): 1. Склад 1(4) - Склад 2(1) 2. Склад 1(4) - Склад 2(2) ... 7. Склад 1(4) - Склад 2(7) |
|||
56
Garykom
гуру
28.01.16
✎
15:16
|
(54) Все работает, сча тестю с ХранилищемЗначения, если что то не так буду думать уже
|
|||
57
Garykom
гуру
28.01.16
✎
15:21
|
(54) блин и правда мульён... совсем старею уже в уме умножать разучился ((
|
|||
58
Serginio1
28.01.16
✎
18:14
|
(55) Ты конечно извращенец такие алгоритмы на 1С считать.
|
|||
59
Garykom
гуру
28.01.16
✎
18:22
|
(58) это не я извращенец ))
но если подскажете быстрый способ передачи таких данных из 1С куда то и назад буду благодарен и даже ВК наваяю |
|||
60
Serginio1
29.01.16
✎
00:46
|
(59) Передавай safeArray. В .Net он определится как массив.
|
|||
61
Другая
29.01.16
✎
01:17
|
(0) Жениться тебе надобно, и все пройдет.
|
|||
62
VladZ
29.01.16
✎
05:39
|
(0) Что это за инфа, которую нужно хранить в 1С?
|
|||
63
VladZ
29.01.16
✎
05:44
|
+62 Продолжу свою мысль. Допустим, у нас есть некая совокупность данных с определенной структурой. Вспоминаем, как называется "совокупность данных, хранимых в соответствии со схемой данных..."... База данных!!! :) Вот и храни во внешней базе данных! Нужно подцепить к 1С - используй внешний источники. Какой "пихать н е в п и х у е м о е"?
|
|||
64
VladZ
29.01.16
✎
05:45
|
* опечатка: "Какой смысл..." далее по тексту
|
|||
65
ЧеловекДуши
29.01.16
✎
06:40
|
(0) В регистре, только в виде одномерного варианта :)
|
|||
66
Garykom
гуру
29.01.16
✎
10:46
|
(61) Кандидаток из Москвы пока не рассматриваю :)
|
|||
67
Garykom
гуру
29.01.16
✎
10:46
|
(62) вот такая инфа https://ru.wikipedia.org/wiki/Алгоритм_Флойда_%E2%80%94_Уоршелла
|
|||
68
Garykom
гуру
29.01.16
✎
10:48
|
(65) и в константе оно хорошо хранится точнее в 3-х константах разных
ЗЫ когда уже 1С придумает "группы для констант", а то только формы и наборы мало помогают |
|||
69
Serginio1
29.01.16
✎
11:19
|
60+ Кстати десериализация массива очень быстра и компактна
var res = new int[20, 20]; for (int i = 0; i < res.GetLength(0); i++) for (int j = 0; j < res.GetLength(1); j++) res[i, j] = i + 20 + j; var stream = new MemoryStream(); var bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); bf.Serialize(stream, res); textBox.AppendText(stream.Length.ToString() + Environment.NewLine); Общий размер байт 1638 20*20*4=1600 и плюс информация о размере массива типе еще 38 байт |
|||
70
Garykom
гуру
29.01.16
✎
11:22
|
(69) а терь плиз повторить тест с 1000х1000 ))
|
|||
71
Garykom
гуру
29.01.16
✎
11:23
|
(70)+ и в 1С ))
|
|||
72
Serginio1
29.01.16
✎
11:24
|
(70) 4000038
|
|||
73
Serginio1
29.01.16
✎
11:26
|
71 Ну в 1С то есть COMSafeArray это и сам сможешь
|
|||
74
Serginio1
29.01.16
✎
11:28
|
60+ В Net COMSafeArray сразу приводится к двумерному массиву. При передаче в 1С он будет как COMSafeArray
|
|||
75
Garykom
гуру
29.01.16
✎
11:46
|
(74) а в linux?
|
|||
76
Serginio1
29.01.16
✎
11:58
|
(75) В линкус можешь сереиализовать в CSV или JSON.
|
|||
77
Garykom
гуру
29.01.16
✎
12:02
|
(76) Да можно
Интересно ограничения на практике на длину передаваемых строковых параметров какие будут |
|||
78
Serginio1
29.01.16
✎
12:07
|
Кстати ЗаписатьJSON(<ЗаписьJSON>, <Значение>, <НастройкиСериализации>, <ИмяФункцииПреобразования>, <МодульФункцииПреобразования>, <ДополнительныеПараметрыФункцииПреобразования>)
Параметры: <ЗаписьJSON> (обязательный) Тип: ЗаписьJSON. Объект, через который осуществляется запись JSON. Поток JSON должен быть подготовлен для записи значения. <Значение> (обязательный) Тип: Произвольный. Объект записи JSON. Меняет состояние потока записи. Представляет собой значение произвольного типа. В формате JSON допускается записывать только значения следующих типов: Строка, Число, Булево, Дата (преобразованная в строку), Массив, ФиксированныйМассив, Структура, ФиксированнаяСтруктура, Соответствие, ФиксированноеСоответствие. Ключ соответствия (или фиксированного соответствия) должен иметь тип Строка. В противном случае, будет вызвано исключение. Если будет передано значение, отличное от перечисленных, оно должно быть преобразвоано с помощью функции преобразования. При попытке записать значение недопустимого типа будет вызвано исключение. <НастройкиСериализации> (необязательный) |
|||
79
Serginio1
29.01.16
✎
12:07
|
(77) Ограничение только на память
|
|||
80
Serginio1
29.01.16
✎
12:09
|
Двумерный массив по сути то одномерный
|
|||
81
Serginio1
29.01.16
✎
12:16
|
Или массив массивов
|
|||
82
Кирпич
29.01.16
✎
12:17
|
Бугага!!!
мои предсказания в (10) сбылись :) |
|||
83
Garykom
гуру
29.01.16
✎
12:23
|
(82) http://www.anekdot.ru/id/674409/
хотя это http://www.anekdot.ru/id/-9946592/ мне больше нравится :) |
|||
84
rsv
29.01.16
✎
12:26
|
(0) Сколько MS SQL Enterp дает полей в таблице по max ?
|
|||
85
Serginio1
29.01.16
✎
12:27
|
82 Ну нужно же направить на путь истинный. А то считать матрицы в 1С как то не кошерно. здесь лучше всего подходит С++ с SIMD вычислениями
|
|||
86
rsv
29.01.16
✎
12:29
|
+(84) т.е. 1000 строк на 1000 столбцов и ... select * from
|
|||
87
Garykom
гуру
29.01.16
✎
12:29
|
||||
88
Кирпич
29.01.16
✎
12:34
|
(85) да я бы проще сделал: сляпал бы по бырому ВК с алгоритмом Дейкстры. выгрузил бы таблицу с ребрами в текст. там будет меньше мегабайта. Расчет магшрута занимал бы полсекунды вместе с загрузкой таблицы. Два часа работы.
|
|||
89
Serginio1
29.01.16
✎
12:42
|
||||
90
Serginio1
29.01.16
✎
12:44
|
(88) Я алгоритм Дейкстры знаю, а вот в алгоритм Флойда Уоршелла не вникал.
А так полностью согласен. |
|||
91
Кирпич
29.01.16
✎
12:48
|
(90) я и алгоритм Дейкстры не знаю, но могу скопипастить в интернете. :)
|
|||
92
trad
29.01.16
✎
12:48
|
(86) для хранения в sql двумерного массива нужна таблица только из 3 колонок:
Стр,Кол,Знач первичный ключ (Стр,Кол) - для получения элемента и выборки строки массива и доп индекс (Кол,Стр) - для получения выборки колонки массива |
|||
93
trad
29.01.16
✎
12:50
|
(92)+ все это отлично ложится в регистр сведений
|
|||
94
Serginio1
29.01.16
✎
12:51
|
(91) Он очень понятный. А насчет (10) Поверь, я долго держался. Но считать такие вещи на 1С это извращение.
|
|||
95
Кирпич
29.01.16
✎
12:51
|
(92) спасибо тебе, что ты есть.
|
|||
96
rsv
29.01.16
✎
12:51
|
(92) Это вертикаль .(86) - горизонт
|
|||
97
Serginio1
29.01.16
✎
12:52
|
(94) Но я то предложил бинарную сериализацию в 69
|
|||
98
trad
29.01.16
✎
12:52
|
(95) звучит почти как: Слава тебе, Господи!
|
|||
99
trad
29.01.16
✎
12:53
|
(96) что? какая вертикаль? какой горизонт?
Стр,Кол,Знач - тут и вертикаль и горизонт |
|||
100
rsv
29.01.16
✎
12:56
|
(99) Ну это .... прямая .
|
|||
101
trad
29.01.16
✎
12:57
|
(99)+ знать о макс количество колонок (Q) в таблице нужно только тогда, когда нужно организовать N-мерный массив, с N близким к Q
|
|||
102
trad
29.01.16
✎
12:59
|
(100)
Инд1,Знач - это линия Инд1,Инд2,Знач - это плоскость, двумерный массив Инд1,Инд2,Инд3,Знач - это куб и т.д. Инд1,..,ИндN,Знач - это N-мерный массив |
|||
103
rsv
29.01.16
✎
13:00
|
(101) Скуль знает ...
|
|||
104
ЧеловекДуши
29.01.16
✎
13:00
|
(69) А вытягивать ты будешь, в циклах?
Я так то рассматривал вариант получение информации под средством запросов :) |
|||
105
ЧеловекДуши
29.01.16
✎
13:02
|
(99) Зачем вообще знать количество колонок?
Кто сказал, что в таблица должна быть размера массива? Какая СУБД такое может предоставить, когда Сегодня там 100, а завтра 10000 элементов? Человек не сойдет с ума, внося 1000 колонок в одну таблицу? :) |
|||
106
ЧеловекДуши
29.01.16
✎
13:03
|
+(105) К чему такое расточительное хранение информации? :)
|
|||
107
Кирпич
29.01.16
✎
13:04
|
(105) ладно вам. ну ляпнул человек неподумавши.
|
|||
108
trad
29.01.16
✎
13:05
|
(105) эти вопросы ко мне?
я не говорю про 1000 колонок в одной таблице я говорю что двумерный массив размещается в трех колонка одной таблицы |
|||
109
Кирпич
29.01.16
✎
13:06
|
+(107) хотя 1000 столбцов это додуматься надо :)
|
|||
110
trad
29.01.16
✎
13:33
|
(107) кто ляпнул не подумавши?
озвучь мой ляп |
|||
111
Garykom
гуру
29.01.16
✎
13:36
|
(88) если бы
просто между складами ездиют не каждый день а по дням недели день пропустили значит что? или ищем обходной маршрут в тот же день или нужно ожидание в каком то складе |
|||
112
Кирпич
29.01.16
✎
13:36
|
(110) да не ты
|
|||
113
ЧеловекДуши
29.01.16
✎
13:40
|
(108) Не, не вам, у вас так как должно быть :)
|
|||
114
Кирпич
29.01.16
✎
13:40
|
(111) и что это меняет? поставь в массиве Infinity, если не работает.
|
|||
115
Garykom
гуру
29.01.16
✎
13:56
|
(114) а каким значком в 1С можно заменить "8" на боку то?
|
|||
116
Кирпич
29.01.16
✎
13:57
|
+(114) да и вабще, у тебя 64 склада. даже в 1с считать будет быстро, без ВК можно обойтись. Только алгоритм Дейкстры нужно набивать в 1с (если его нету ещё)
|
|||
117
Garykom
гуру
29.01.16
✎
13:58
|
(116) 64(склада) * 7(дней в неделе) = ?
вообще то |
|||
118
Кирпич
29.01.16
✎
13:58
|
(115) зачем тебе значки? буквами напиши или цифрами.
|
|||
119
Кирпич
29.01.16
✎
14:00
|
(117) ну это ты так решил. может же быть и по другому.
|
|||
120
Кирпич
29.01.16
✎
14:01
|
(117) они у тебя по нескольку дней ездят? типа дальнобойщики?
|
|||
121
Garykom
гуру
29.01.16
✎
14:02
|
Блин как в 1С получить разницу в днях между 2 днями недели по нормальному течению?
1(Пн) - 4(Чт) = 3 дня разницы 4(Чт) - 1(Пн) = 4 дня 5(Пт) - 1(Пн) = 3 дня |
|||
122
Garykom
гуру
29.01.16
✎
14:03
|
(121)+ в смысле переход Вс-Пн когда с 7 дня на 1 день по кругу это учитывать?
|
|||
123
Garykom
гуру
29.01.16
✎
14:04
|
(120) они заразы до 14 дней ездят
|
|||
124
Garykom
гуру
29.01.16
✎
14:04
|
(119) по другому уже Флойд работать не будет )) и нужен волновой или еще что
|
|||
125
Кирпич
29.01.16
✎
14:07
|
(124) а я не знаю чем тебе Флойд поможет.
Рёбра у тебя в часах пути или в километрах? |
|||
126
Garykom
гуру
29.01.16
✎
14:08
|
(121) Так правильно?
Если ТекДеньКуда>=ТекДеньОткуда Тогда ДлинаВДнях = ТекДеньКуда - ТекДеньОткуда; Иначе ДлинаВДнях = (7 - ТекДеньОткуда) + ТекДеньКуда; КонецЕсли; |
|||
127
Garykom
гуру
29.01.16
✎
14:08
|
(125) ребра в СрокТранзита или СрокТранзита + 1 день иногда
|
|||
128
Кирпич
29.01.16
✎
14:10
|
(127) в днях чтоли
|
|||
129
Garykom
гуру
29.01.16
✎
14:12
|
(128) угу
|
|||
130
Кирпич
29.01.16
✎
14:17
|
(129) так они у тебя комивояжеры
|
|||
131
Кирпич
29.01.16
✎
14:19
|
интересная фигня получается. таблицу дашь поглядеть?
|
|||
132
Garykom
гуру
29.01.16
✎
14:19
|
(130) еще те млин вояжеры
(131) потом как сдам выложу с демо данными своими придумаю |
|||
133
Кирпич
29.01.16
✎
14:21
|
(132) ну ладна. парься сам тогда. займусь чем нибудь другим.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |