2013-08-18 9 views
0

В компании, в которой я работаю, работает проект C#, который сканирует данные со 100 сайтов, сохраняя их в БД и выполняя некоторые процедуры и вычисления по этим данным.системная архитектура для данных в реальном времени

Каждый из этих 100 сайтов имеет около 10000 событий, и каждое событие сохраняется в БД.

После этого данные, которые были сохранены, сгенерированы и объединены в один большой xml-файл, поэтому каждый из этих 10000 событий, которые были сохранены, теперь представлен как XML-файл в БД.

Эта конструкция выглядит следующим образом:

1) crawling 100 websites to collects the data and save it the DB. 
2) collect the data that was saved to the DB and generate XML files for each event 
3) XML files are saved to the DB 

Основной проблемой для этой должности, является выбор сохраненных файлов XML.

Каждый XML составляет около 1 МБ, и учитывая тот факт, что существует около 10 000 событий, я не уверен, что SQL Server 2008 R2 является правильным вариантом.

Я попытался использовать Redis, и сохранение работает очень хорошо (и быстро!), Но запрос на получение этих XML-файлов работает очень медленно (даже локально, поэтому сетевой трафик не будет проблемой).

Мне было интересно, что вы думаете? учтите, что это система реального времени, поэтому кэширование здесь не является вариантом.

Любая идея будет приветствоваться.

Спасибо.

+0

Вместо того, чтобы хранить большие файлы XML в базе данных, не будет ли он экономить ресурсы, если вы должны сохранить данные о событиях в таблице событий и создать файл XML для события/с при запросе данных? Это также позволит вам создавать несколько типов форматов для таких событий, как HTML, JSON и т. Д. Это также позволит вам запускать запросы о событиях, которые вам нужно в любой момент - например, события, происходящие в следующие 2 дня и т. Д. –

+0

Эти XML запрашиваются сотни раз каждую минуту, так что потребуется много времени, чтобы генерировать их во время выполнения, что практически невозможно. Я предпочитаю их генерировать один раз, сохранять их в БД и предоставлять всем нашим клиентам эти XML. Проблема в том, что SQL Server 2k8 R2 не подходит. –

+0

Итак, эти фиксированные XML-файлы, и клиентский запрос будет производить один или несколько из них на основе каких-то критериев? –

ответ

1

Вместо использования БД вы можете попробовать систему облачной базы (Azure blobs или Amazon S3), это идеальное решение. См. Это сообщение: azure blob storage effectiveness, в той же ситуации, кроме файлов XML вместо изображений. Вы можете использовать БД для хранения метаданных, то есть источника и типа события XML, пути в облаке, но не самих данных.

Вы также можете заархивировать файлы. Я не знаю точного метода, но его можно, конечно, обрабатывать на стороне клиента. Статические данные часто отправляются клиенту по умолчанию в zip-формате.

0

Ваша основная арка, похоже, не виновата, ее способ, которым вы воспринимаете redis, в основном, если вы создаете значение key => прямо, нет никакого способа, чтобы извлечение из redis могло быть медленным.

для более ранних версий, скажем, я должен хранить 1 мил объектов в redis и сказать, что есть идентификатор, против которого я храню свои объекты, этот ключ - не что иное, как руководство, сохранение будет очень быстрым, но когда он приходит к поиску, я знаю «ключ», если я ЗНАЮ ключ, он будет быстрым, но если я этого не знаю или пытаюсь получить мои данные не на основе ключа, а на основе некоторые значения в моих объектах, то, конечно, это будет медленно. Дело в том, что, когда дело доходит до извлечения, вы должны просто работать против «ключа» и ничего больше, поэтому создайте свой ключ как само заранее рассчитанное значение; поэтому, когда мне нужно получить некоторые данные из redis/memcahce, я мог бы сделать KEY и просто сделать один хит, чтобы получить данные.

Если вы могли бы добавить более подробную информацию, мы сможем помочь вам лучше.

1

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

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

10 ГБ данных в день - это то, что SQL Server 2008 R2 может обрабатывать с правильным оборудованием и хорошей структурой оптимизации. Вам нужно будет изучить, будет ли стандартная версия достаточной или вам придется использовать лицензии на предприятия или центры обработки данных.

В любом случае ответ да - SQL Server способен обрабатывать этот объем данных, но я бы также проверял другие решения, чтобы увидеть, можно ли каким-либо образом снизить затраты.