|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
Здравствуйте! Нужно написать один высоконагруженный проект, для БД выбираем MongoDB, прочитал много чего оптимистичного про него. Скачал и установил MongoDB на Linux Debian (ОЗУ: 4 гига, процессор: Intel Xeon двухядерный) Чтобы залить в БД 31 КК записей пришлось потратить около 4 часа, в 500 потоках, каждый поток за раз сгенерирует от 500 до 1000 строк рандомом в цикле и инсертить их в БД, и идет на следующий цикл. В начале процесса в секунду в БД инсертилось около 20-30 тыщ строк, а в конце всего 2-3 тыщ строк. Заливаю php скриптом с одного сервера на другой соседний сервер: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75.
Скорость инсерта уменьшилось почти в 10 раз ( А также, при обычном выборе БД вообще зависает и выдает ошибку Fatal error: Uncaught exception 'MongoCursorTimeoutException' with message 'cursor timed out (30000 ms) (не законченный вопрос за 30 сек завершается сервером принудительно) Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Неужели МонгоДБ не сумеет работать с таким большим количеством данных ? я думал там хранить более 3,5 миллиардов строк и вытащить оттуда нужных строк (обращение в многопоточном режиме, в каждом потоке разные запросы), вообще такое возможно ? Если Вам знакомо такая ситуация, какие имеются пути для решения данной проблемы ? или отказаться от Монго ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2012, 13:17 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
max aka max, я на Firebird 2.1 на машинке с Athlon 64 x2 5200 залил 1 терабайт данных за 3 дня (70 часов, при этом я еще на ней работал в дневное время). Правда, заливал в таблицы без индексов, иначе получилось бы не меньше недели, а то и две-три. Всего записей было залито 6187651796, т.е. 6.2 миллиарда. Средняя скорость вставки - 24.5к записей в секунду. TPC-C. Диски - одиночные sata за 50-70 баксов, никаких raid. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2012, 13:32 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
по MongoDB: я с ней вообще не работал, но подозреваю, что заливка данных в 500 потоках наоборот, замедляет вставку. "С одного сервера на другой" - здесь влияет сеть, однозначно. Ну и еще - генерация рандомных значений в php, подозреваю что основное время тратится именно на это (на php). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2012, 13:34 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
kdvНу и еще - генерация рандомных значений в php, подозреваю что основное время тратится именно на это (на php). явно дело не в пхп. В начале процесса в секунду в БД инсертилось около 20-30 тыщ строк, а в конце всего 2-3 тыщ строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2012, 13:58 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
kdvmax aka max, я на Firebird 2.1 на машинке с Athlon 64 x2 5200 залил 1 терабайт данных за 3 дня (70 часов, при этом я еще на ней работал в дневное время). Правда, заливал в таблицы без индексов, иначе получилось бы не меньше недели, а то и две-три. Всего записей было залито 6187651796, т.е. 6.2 миллиарда. Средняя скорость вставки - 24.5к записей в секунду. TPC-C. Диски - одиночные sata за 50-70 баксов, никаких raid. впечатляет. я попробую в одном потоке заливать данные, надеюсь смогу увеличить скорость заливки... а у меня главный вопрос : Как быть с выбором данных ? как оптимизировать ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2012, 14:04 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
Yo.!kdvНу и еще - генерация рандомных значений в php, подозреваю что основное время тратится именно на это (на php). явно дело не в пхп. В начале процесса в секунду в БД инсертилось около 20-30 тыщ строк, а в конце всего 2-3 тыщ строк. да дело не пхп, дело в том что запросы на инсерт сначала быстро быстро отрабатываются на стороне сервера, но потом уже некоторые время начинает зависать запросы... а вот как быть с селектами пока незнаю ( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2012, 14:06 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
А какие требования к результирующей системе? Размер понятен, а сколько и каких операций? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2012, 15:04 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
DPH3А какие требования к результирующей системе? Размер понятен, а сколько и каких операций? Итак: Пишем систему топрейтинга и аналитики посещений сайтах ( примерно 15 тысячи сайтов), кроме IP посетителей сайтов, будут еще куча полезных информаций, версия флеша, Net Framework, Разрешение экрана, Бразуер , ОС и т.д. Владелец сайта может узнать как всю информацию о посетителях своего сайта, так и информацию по всем 15 тыщ сайтам. Аналог Яндекс Метрики :) Годится ли под такую задачу использовать MongoDB, и как правильно создать структуру данных ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2012, 19:02 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
max aka maxDPH3А какие требования к результирующей системе? Размер понятен, а сколько и каких операций? Итак: Пишем систему топрейтинга и аналитики посещений сайтах ( примерно 15 тысячи сайтов), кроме IP посетителей сайтов, будут еще куча полезных информаций, версия флеша, Net Framework, Разрешение экрана, Бразуер , ОС и т.д. Владелец сайта может узнать как всю информацию о посетителях своего сайта, так и информацию по всем 15 тыщ сайтам. Аналог Яндекс Метрики :) Годится ли под такую задачу использовать MongoDB, и как правильно создать структуру данных ? Вы же небось захотите потом статистику сколько заходило под каким браузером, когда, еще по куче полезной информации если б только хранить персональную информацию пользователя то еще можно подумать, а так мне кажется задача чисто для реляционных субд может даже олап какой нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2012, 23:53 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
max aka maxИтак: Пишем систему топрейтинга и аналитики посещений сайтах Русский Omniture? Ну, ну... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2012, 00:17 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
max aka maxИтак: Пишем систему топрейтинга и аналитики посещений сайтах ( примерно 15 тысячи сайтов), кроме IP посетителей сайтов, будут еще куча полезных информаций, версия флеша, Net Framework, Разрешение экрана, Бразуер , ОС и т.д. Владелец сайта может узнать как всю информацию о посетителях своего сайта, так и информацию по всем 15 тыщ сайтам. Аналог Яндекс Метрики :) Годится ли под такую задачу использовать MongoDB, и как правильно создать структуру данных ? Всё дальше сказанное оффтоп и ИМХО. Вы решаете проблемы вчерашнего дня методами десятилетней давности. Это конечно полезно в учебных целях и возможно даже имеет теоретический интерес, но с практической точки зрения малоефективно. Вам нужен OLAP, BI, data mining и соответсвующие подходы, методы и средства. Подобные задачи имеют много известных поставщиков рещений . А вот ковыряние со скоростю вставки в какую-то модную/новую базу данных совсем не преближает к рещению проблемы а только показывает как далеко вы от её понимания. Хотя можно конечно флейма ради и Монго ковырять. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2012, 01:15 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
max aka maxИтак: Пишем систему топрейтинга и аналитики посещений сайтах ( примерно 15 тысячи сайтов), кроме IP посетителей сайтов, будут еще куча полезных информаций, версия флеша, Net Framework, Разрешение экрана, Бразуер , ОС и т.д. Владелец сайта может узнать как всю информацию о посетителях своего сайта, так и информацию по всем 15 тыщ сайтам. А какие данные нужно хранить? Если только аггрегаты (статистика за день, например) - то и данных нужно хранить не много и требований по скорости записи нет никаких. Если первичку (т.е. данные по каждому пользователю), то требования к производительности зависят от самого нагруженного сайта из 15000 (если нет задач отслеживания поведение одного пользователя на разных сайтах, то система легко шардится по сайтам). Но как тут правильно пишут, сначала определитесь с типами запросов и аналитики, а потом уже тестируйте на скорость вставки (которая во многих случаях вообще не важна, так как первичку сохранять необходимости нет). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2012, 16:24 |
|
Высоконагруженный проект (MongoDB)
|
|||
---|---|---|---|
#18+
Интересно на счетчики дисковой подсистемы посмотреть во время этого безобразия ПО поводу таймаута, есть вроде рекомендации: http://us.php.net/manual/en/mongocursor.timeout.php ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2012, 21:45 |
|
|
start [/forum/topic.php?fid=35&msg=37851789&tid=1552545]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 147ms |
0 / 0 |