есть некий std::set (в нем тесктовые строки) который в ходе выполнения программы разростается до колоссальных размеров.. причем, в момент когда физическая память кончается, машина начинает сильно тормозить.
Есть желание писать эти строки в базу данных.
Посоветуйте пожалуйста — какую технологию выбрать? Наиболее критичный параметр — скорость работы, система используется одним юзером.
Хотя нутром чуствую, что это слишком "круто". Есть желание сделать просто набор текстовх файлов, например с именам aa, ab, ac и т.д. и записывать строки в эти файлы и потом просто их просматривать. Вообщем, как сделать так что бы это работало максимально быстро?
Здравствуйте, Russ, Вы писали:
R>Привет всем,
R>есть некий std::set (в нем тесктовые строки) который в ходе выполнения программы разростается до колоссальных размеров.. причем, в момент когда физическая память кончается, машина начинает сильно тормозить.
R>Есть желание писать эти строки в базу данных.
R>Посоветуйте пожалуйста — какую технологию выбрать? Наиболее критичный параметр — скорость работы, система используется одним юзером.
R>Хотя нутром чуствую, что это слишком "круто". Есть желание сделать просто набор текстовх файлов, например с именам aa, ab, ac и т.д. и записывать строки в эти файлы и потом просто их просматривать. Вообщем, как сделать так что бы это работало максимально быстро?
R>Заранее спасибо, R>Руслан.
А дык может поставить простую БД и хранить строки там? Какие еще ограничения есть? ( количество строк, необходимые опреации с ними, для чего эти строки используются )
Здравствуйте, Ведмедь, Вы писали: R>>есть некий std::set (в нем тесктовые строки) который в ходе выполнения программы разростается до колоссальных размеров.. причем, в момент когда физическая память кончается, машина начинает сильно тормозить.
В>А дык может поставить простую БД и хранить строки там? Какие еще ограничения есть? ( количество строк, необходимые опреации с ними, для чего эти строки используются )
количество строк: от 50 000-100 000 в в 30% случаев и до 1 000 000 и далее к бесконечности в остальных.
строки — это линки на страницы (URLs)
А что ты понимаешь под словом "простая БД"... я с БД не работал никогда и не знаю всех этих тонкостей... а при наличии большого количества технологии которые предлагает майкрософт, я просто не знаю с чего начать и про что читать.. В MSDN написано что если надо performance то надо пользовать OLE DB но у меня уж очень простая БД, без каких либо связей.
Здравствуйте, Russ, Вы писали:
R>Здравствуйте, Ведмедь, Вы писали: R>>>есть некий std::set (в нем тесктовые строки) который в ходе выполнения программы разростается до колоссальных размеров.. причем, в момент когда физическая память кончается, машина начинает сильно тормозить.
В>>А дык может поставить простую БД и хранить строки там? Какие еще ограничения есть? ( количество строк, необходимые опреации с ними, для чего эти строки используются )
R>количество строк: от 50 000-100 000 в в 30% случаев и до 1 000 000 и далее к бесконечности в остальных. R>строки — это линки на страницы (URLs)
R>А что ты понимаешь под словом "простая БД"... я с БД не работал никогда и не знаю всех этих тонкостей... а при наличии большого количества технологии которые предлагает майкрософт, я просто не знаю с чего начать и про что читать.. В MSDN написано что если надо performance то надо пользовать OLE DB но у меня уж очень простая БД, без каких либо связей.
R>Спасибо заранее, R>Руслан.
Возми для такого аксесовскую базу или MSDE, я думаю все будет вполне шустро.
А то получается что надо изобретать велосипед, когда можно воспользоваться готовым решением.
ЗЫ: НАдо же когда то начинать и с базами работать
Здравствуйте, Ведмедь, Вы писали: В>Возми для такого аксесовскую базу или MSDE, я думаю все будет вполне шустро. В>А то получается что надо изобретать велосипед, когда можно воспользоваться готовым решением. В>ЗЫ: НАдо же когда то начинать и с базами работать
Ок, спасибо! Я думаю у каждого бывает момент в жизни
когда надо "начинать и с базами работать".
Видимо пришел и мой час
В>>А дык может поставить простую БД и хранить строки там? Какие еще ограничения есть? ( количество строк, необходимые опреации с ними, для чего эти строки используются ) R>количество строк: от 50 000-100 000 в в 30% случаев и до 1 000 000 и далее к бесконечности в остальных. R>...я с БД не работал никогда...
Возможно, если тебе не надо часто обновлять записи(строке) и сортировать — то вариант хранения в вайлах подойдет. Если это не так — прийдется учить, как работать с базами данных. А ОЛЕ ДБ использовать, или другую технологию — все равно в данном случае(ИМНО)
Здравствуйте, King Oleg, Вы писали: KO>Возможно, если тебе не надо часто обновлять записи(строке) и сортировать — то вариант хранения в вайлах подойдет. Если это не так — прийдется учить, как работать с базами данных. А ОЛЕ ДБ использовать, или другую технологию — все равно в данном случае(ИМНО)
Вообщем уточнение:
в этой базе хранятся линки на страницы, которые уже были "в работе". То есть программа перед тем как приступить к распарсиванию очередного линка. Это сделано чтобы не попасть в цикл и не делать лишней работы.
Здравствуйте, Ведмедь, Вы писали:
R>>количество строк: от 50 000-100 000 в в 30% случаев и до 1 000 000 и далее к бесконечности в остальных.
В>Возми для такого аксесовскую базу или MSDE, я думаю все будет вполне шустро.
Наверное, лучше сразу MSDE. Объем данных намечается вроде немаленький.
Здравствуйте, Admiral, Вы писали: R>>>количество строк: от 50 000-100 000 в в 30% случаев и до 1 000 000 и далее к бесконечности в остальных. В>>Возми для такого аксесовскую базу или MSDE, я думаю все будет вполне шустро. A>Наверное, лучше сразу MSDE. Объем данных намечается вроде немаленький.
Я думаю (ИМХО, конечно) это слишком круто, поскольку мне еще надо такой сетап
создать чтобы программа без проблем ставилась на компах конечных пользователей.
Насколько я понимаю MSJET почти у всех стоит по умолчанию. Или я не прав?
Здравствуйте, Russ, Вы писали:
R>Привет всем,
R>есть некий std::set (в нем тесктовые строки) который в ходе выполнения программы разростается до колоссальных размеров.. причем, в момент когда физическая память кончается, машина начинает сильно тормозить.
тогда мы можем использовать дерево со след структурой
www
foo
com
A
B C
A
Помимо этого можно хэшировать строки, и хранить в узлах не сами строки, а указатели на них.
Тогда в вышеприведенном примере, мы будем иметь лишь одну копию "А".
Здравствуйте, _Obelisk_, Вы писали:
> Может быть другую структуру данных использовать для хранения.
Я сначала думал что юзьвери не будут вообще жаловаться
на то что у них виртуальная память кончается,
но они (как это обычно и бывает) превзошли все мои
ожидания оставляя мою прогу работать сутками..
поэтому даже самая оптимальная структура данных
упирается в наличие свободной памяти в системе..
Здравствуйте, _Obelisk_, Вы писали: _O_>Тем не менее, лучше использовать более оптимальные структуры данных и если потребуется, _O_>то их и хранить в БД (винт у компа тоже не безграничный)
согласен правда, на данный момент, я храню md5 этих строк, поскольку они мне сами не нужны и я просто проверяю были ли они отработаны ранее или нет.
Нужно брать BDB 1.85 (1994 год) — она бесплатная совсем. Но многопоточность по записи ей не привить без больших переделок, а вот по чтению — нормально. Пользуюсь.
Более поздние версии BDB стоит брать только в том случае, если продукт распространятеся как OpenSource, либо не распространяется вообще (там есть определение, что считается распространением).
Алгоритм, понятно, BTREE. Поддержка ключей переменной длины есть.
Здравствуйте, Russ, Вы писали:
R>Я думаю (ИМХО, конечно) это слишком круто, поскольку мне еще надо такой сетап R> создать чтобы программа без проблем ставилась на компах конечных пользователей. R>Насколько я понимаю MSJET почти у всех стоит по умолчанию. Или я не прав?
Надо тестировать. На моих задачах(правда у меня запросы не тривиальные)акцесс оказался в 15-100 раз медленней.
... << RSDN@Home 1.1 alpha 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн