Другие языки программирования и технологии
Хранение 10 млн строк данных (бд или нечто другое) [c#]
Требуется хранение порядка 10 млн строк вида (8 столбцов по 3 символа). В последующем нужно будет достать все эти данные наиболее быстрым способом и провести с ними расчеты. Что для этого использовать бд, текстовый файл либо чтото другое. Есть опасения что доставать данные из бд или файла будет очень долго. В идеале наверно было бы чтоб эти данные каким-то образом сразу все грузились в оперативку и от туда их уже использовать, но как это реализовать? В общем в какую сторону копать?
redis тебе в руки
Вообще-то базы данных созданы именно для решения таких задач, как у вас.
Если вы готовы пожертвовать оперативкой ради скорости (в смысле места в оперативке вам не жаль), то вам, возможно, подойдут базы данных NoSQL. Самая известная из них - Mongo, как раз говорят, что быстрая и что кушает много оперативки, за счет чего и достигается скорость. Для Си шарпа у нее есть библиотека.
Никто не запрещает вам залить всю таблицу в оперативку и с помощью SELECT * FROM name_table
Если вы готовы пожертвовать оперативкой ради скорости (в смысле места в оперативке вам не жаль), то вам, возможно, подойдут базы данных NoSQL. Самая известная из них - Mongo, как раз говорят, что быстрая и что кушает много оперативки, за счет чего и достигается скорость. Для Си шарпа у нее есть библиотека.
Никто не запрещает вам залить всю таблицу в оперативку и с помощью SELECT * FROM name_table
Есть базы данных, которые грузятся в оперативку. В любом случае их предварительно туда надо загрузить из файла.
в сторону memcached или tarantool(кстати проект майла + исходники открыты) посмотри
> Что для этого использовать бд, текстовый файл
Все ли данные планируется доставать, или только выборочно отдельные строчки?
Если выборочно, то БД будет быстрее, т. к. чтобы достать одну строчку из обычного текстового/бинарного файла, нужно прочитать все строчки до нее, из БД же читается только заголовок + эта строчка.
Если все, то, наверно, быстрее будет текстовый/бинарный формат наподобие CSV, т. к. там будет минимум лишних символов (разделителей), которые придется читать. CSV практически всегда компактнее, чем БД.
> Есть опасения что доставать данные из бд или файла будет очень долго.
Данных не так и много, поэтому не очень долго, ну несколько минут где-то... Хотя зависит от железа, например, от диска, на котором будет лежать файл. SSD быстрее, чем HDD. HDD быстрее, чем флешка или CD/DVD.
> каким-то образом сразу все
Ну разве только многопоточность, но сомневаюсь, что возможен многопоточный доступ к 1 файлу - не интересовался.
К тому же, строки явно будут грузиться в неправильном порядке - перемешиваться.
Еще помогает задание высокого приоритета процессу программы, но тогда зато другие программы будут тормозить, если запущены одновременно.
Скорее стоит думать о том, как сократить размер каждой ячейки, ведь чем меньше символов надо считать, тем быстрее.
Все ли данные планируется доставать, или только выборочно отдельные строчки?
Если выборочно, то БД будет быстрее, т. к. чтобы достать одну строчку из обычного текстового/бинарного файла, нужно прочитать все строчки до нее, из БД же читается только заголовок + эта строчка.
Если все, то, наверно, быстрее будет текстовый/бинарный формат наподобие CSV, т. к. там будет минимум лишних символов (разделителей), которые придется читать. CSV практически всегда компактнее, чем БД.
> Есть опасения что доставать данные из бд или файла будет очень долго.
Данных не так и много, поэтому не очень долго, ну несколько минут где-то... Хотя зависит от железа, например, от диска, на котором будет лежать файл. SSD быстрее, чем HDD. HDD быстрее, чем флешка или CD/DVD.
> каким-то образом сразу все
Ну разве только многопоточность, но сомневаюсь, что возможен многопоточный доступ к 1 файлу - не интересовался.
К тому же, строки явно будут грузиться в неправильном порядке - перемешиваться.
Еще помогает задание высокого приоритета процессу программы, но тогда зато другие программы будут тормозить, если запущены одновременно.
Скорее стоит думать о том, как сократить размер каждой ячейки, ведь чем меньше символов надо считать, тем быстрее.
Ну вообще лучше в бд загонять, а потом уже делать выборку, да и там же провести расчеты, какие можно.
+ индексы могут ускорить выборку
+ индексы могут ускорить выборку
Похожие вопросы
- Паскаль Структура хранения и ведения следующих данных
- ЛЮДИ зачем нужны БД (базы данных для сайта) ? Объясните девушки пожалуйста.
- Насколько безопасно хранение данных на флешке?? Я храню все резервные данные с моего ноута на флешке 32 гб!
- Помогите испрвить код Переписать первые элементы каждой строки матрицы a(n*m), больше некоторого числа C, в массив b .
- Генератор случайных слов (строк) из файла на C++.
- VS/C++ разбиение строки из 10 слов.
- C++ Проверка правильности ввода данных.
- как отформатировать жёский диск "C" через командную строку?
- Нужна книга-самоучитель по использованию БД SQL в связке с C#
- Учу C++! Уже знаю: типы данных, циклы. условия, привидения и т. д учу 5дней. вот программа! Как норм за 5 дней?