| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Метод хранения информации |
| Автор: SoWa 22.2.2011, 08:51 |
| Привет, друзья! Обращаюсь за советом, так как самостоятельно ничего не придумывается, а готовые решения в виде файлов не очень устраивают. Задача: придумать, как хранить в БД типа MSSQL трехмерный массив размером минимум 1кк*1кк*2000 по ячеечкам - чтобы к каждой был доступ легкий Есть какие-нибудь мысли? |
| Автор: panter 22.2.2011, 10:03 | ||
И навешиваешь индексы на cell_x, cell_y, cell_z. |
| Автор: Silent 22.2.2011, 10:12 | ||||
Согласен с panter, если работать с MSSQL, то создаем таблицу
и юзаем на здоровье конкретную ячейку, например, a[0][0][0]
Но доступ таким образом будет достаточно долгим, по сравнению с памятью. Где эти данные используются? Возможно, стоит применить распределенную обработку, или те же самые файлы для хранения массива поблочно. Может быть, уважаемая SoWa, скажете, какую задачу решаете - наверняка есть способ обрабатывать ваши данные быстрее, чем с хранением в SQL? |
| Автор: Akina 22.2.2011, 11:47 |
Т.е. 2*10^15 элементов? ты хорошо подумал? даже если предположить, что размер элемента 1 байт, это получится таблица на 2 петабайта... я уже даже не спрашиваю, где ты её хранить собираешься - как ты её получишь? даже тупо передача такого объёма с винта на винт (существуй такие винты) займёт несколько лет... Или речь идёт о [censored] как разреженных данных? ну тогда хранить в структуре, описанной выше, а обрабатывать, наверное, в зависимости от целей либо напрямую, либо через OLAP. |
| Автор: SoWa 25.2.2011, 15:02 |
| О да, спасибо за советы! Кстати, оказалось, высоты массива достаточно 100, а не 2000. Поэтому размер уменьшается до 100 терабайт Хотя если там будет int, то 400 терабайт. Думаю, что 1кк это тоже многовато, и там можно будет в 10 или 100 раз порезать. |
| Автор: миг 26.2.2011, 11:55 |
| в С++ int(16 разрядный)- принимает значения в диапазоне (-32768 до +32767). Занимает 2 байта памяти int(32 разрядный)- принимает значения в диапазоне (-2 147 483 648 до +2 147 483 647). Занимает 4 байта памяти. вы действительно собираетесь пользоваться всем этим диапазоном чисел? Рекомендую вам определиться с максимальным и минимальным числом, который будет записываться в базу данных. Исходя из этого можно будет выбрать наименьший размер данных для хранения информации. Возможно придется работать с битовыми полями. |
| Автор: SoWa 26.2.2011, 12:46 |
| Хранимое значение от нуля до нескольких миллионов(ориентировочный максимум 40кк). Но это планы на лето Добавлено через 3 минуты и 29 секунд Если на каждого пользователя выделять по 5Мб памяти, то это кубик стороной 173. Неплохо. |
| Автор: SoWa 26.2.2011, 20:01 |
| 107, вероятно я ошибся. Пользователь не один ведь будет... Мильен - это на 10000 пользователей программа-максимум. |