100 столов против одного, большого стола - PullRequest
1 голос
/ 16 марта 2011

Я пытаюсь решить проблему, когда мы анализируем значительный объем данных из таблицы. Нам нужно получить определенные подмножества этих данных и проанализировать их. Я полагаю, что было бы лучше, если бы он был многопоточным, и вначале мог бы принести как можно больше данных и выполнить различные вычисления для каждого региона. Предположим, что каждое подмножество данных для анализа обозначается как S1, S2,… Так что для каждого будет поток. После выполнения вычислений можно также создать некоторую визуализацию, и результаты необходимо будет сохранить обратно в базу данных, поскольку в результатах анализа потенциально может быть много гигабайт данных. Предположим, что результаты обозначены R1, R2,…

Хотя это немного расплывчато, мне интересно, должны ли мы создать таблицу для каждого из R1, R2 и т. Д. Или сохранить все результаты в одной таблице? Вполне вероятно, что нам понадобится несколько потоков, сохраняющих результаты одновременно (напомним, потоки для S1, S2), поэтому, если существует одна таблица, я должен убедиться, что несколько потоков могут обращаться к ней одновременно. Если это поможет, когда данные для R1, R2 и т. Д. Снова понадобятся, все они будут извлечены и в определенном порядке, который было бы легко поддерживать, если бы была таблица для каждого из R1, R2 и т. Д. Также Я думал, что у нас может быть один объект для каждой таблицы, который управляет запросами к этой конкретной таблице результатов, если мы пойдем по этому пути. По сути, я бы хотел, чтобы объект был похож на bean-компонент, который загружает данные из этой базы данных только по мере необходимости (слишком много, чтобы хранить в памяти сразу). Другой момент заключается в том, что мы используем InnoDB в качестве механизма хранения в случае, если есть какая-либо разница в том, могут ли несколько потоков обращаться к определенной таблице.

Итак, с этим битом информации, было бы лучше создать набор таблиц для результатов или по одной для каждой области результатов (возможно, 100 с)?

Спасибо

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Можно, но тогда вам нужно управлять 100 таблицами.А получить статистику для всего набора будет намного сложнее.

Если данные могут быть легко разбиты на разные подмножества, которые не пересекаются, база данных не должна блокировать строки, особенно если вы просто выполняете чтениеи обработка в вашем приложении.В таком случае вам не нужно разбивать таблицу на сотни таблиц, и каждый поток в вашем приложении может использоваться независимо.

0 голосов
/ 16 марта 2011

это звучит как хорошая карта, уменьшающая кандидата.Это предполагает, что вы собираетесь выполнить одни и те же вычисления для всего набора и просто хотите ускорить процесс.

Рассматривали ли вы использовать что-то вроде MongoDB?Вы можете написать свою собственную карту уменьшения агрегации в ней.

Карта уменьшения: http://en.wikipedia.org/wiki/MapReduce

mongo: http://www.mongodb.org/display/DOCS/MapReduce

Mongo поддерживает обновление на месте, и это без блокировкив конце концов последовательный магазин.

...