На всякий случай замечу, что Питон это не Джанго, а Руби это не Рельсы.
Одинаково медленной скорости? :)
Предлагаю поглядеть на существующие мэйнстримы,
у меня в дистрибутиве это Python 2.6.2 и Ruby 1.8.7,
(вроде 1.9 тоже достаточно стабилен, но просто у меня он не собран).
Может набросать какой-нибудь тестик
по поводу вызовов методов экземпляра/класса/унаследованных,
туда же работу со списком или с массивом.
Создание новых объектов тоже не плохо было бы попробовать,
но как по скорости, так и по памяти.
Есть желающие попробовать?
--
-- mpe...@gmail.com icq:3861496 www.penzin.ru --
Я честно говоря вообще не понял что показывают те тесты.
Точнее какую практическую ценность они имеют для меня :)
Потому, что если говорить о математике, то для того же Питона
есть большой набор специализированных мат. библиотек.
Но если их использовать в тестах, то при чем здесь Питон не понятно.
Это всё к тому, что обращения к диску стоят дорого?
Факт медицинский, ага.
> 1. Вычисления. Нагрузка на процессор.
> 2. Вычисления. Нагрузка на память.
> 3. №1 и №2 + селект из БД
> 4. Навороченная ООП структура.
> 5. №4 + селект из БД.
>
> И я бы добавил php ага :)
Я тут некоторое время назад уже задавал простенькую задачку -
посчитать N самых частых слов в текстовом файле.
У меня тут остались два интересных кусочка:
- - -
c={}
STDIN.each { |line| line.split.each { |w| c[w]||=0;c[w]+=1 } }
c.keys.sort.each { |w| puts "#{w}\t#{c[w]}" }
- - -
import operator, re, time, sys
r=re.compile( r'[\s\.,!?;]+' )
res={}
resget = res.get
for w in r.split( open(sys.argv[1]).read() ):
# try: res[w] += 1;
# except: res[w] = 1
res[w] = resget(w,0)+1
freq=res.items()
freq.sort( key=operator.itemgetter(1) )
for w,f in freq: print w,f
- - -
Вот это интересный вопрос - что остальное и почему оно работает медленно?
Несколько отвлеченный, но иллюстративный пример:
При помощи обычного java'вского HashMap'а и List'а можно сделать самостоятельно
(1 страница кода) вполне себе управляемый, in process (нет лишних
переключений контекста)
и быстрый многопоточный кэш без сериализации/десериализации и т.п.
Можно прикинуть, сколько юзерских сессий (кил по 10) можно положить в 1Г РАМа,
т.е. во многих случаях это снизит дисковую нагрузку на порядок.
> Ну все остальное - это, прежде всего, -
> работа с данными на стороне хранилища
> данных (ну можно было бы сказать
> реляционной БД но это, все же, не
> единственное что может хранить).
> Кэш оно конечно хорошо, но большую
> часть User Generated Content в него все же не
> положишь.
Вот тут тоже вопросы возникают. А чего же у нас хранилище-то такое медленное?
Сейчас самый затрапезный диск показывает трансфер от 50 МБ/с и выше.
т.е. если даже эту цифру уменьшить в несколько раз, то всё-равно,
например, 100 мбитный эзер один диск наполняет без проблем.
Следовательно вопрос в организации оптимального доступа к данным на диске.
Понятие "закостенели" мне не очень понятно :)
> Та же mysql может съесть мозг своими особенностями. "Не более A баз на
> сервере, не более B таблиц в базе, не более C записей на таблицу".
Как я понимаю, сами по себе "N баз и M таблиц" уже достаточно велики,
на мой взгляд, если речь идёт о производительности, то N == 1, а M в
пределах сотни-двух,
что само по себе уже очень дофига.
> Есть у нас, конечно, key=>value, давно поднимавшиеся, и сейчас активно
> выползающие из тени в связи с временным (вечным?) наступлением
> параллелизма (да и то, что они масштабируются, как правило, проще -
> тоже играет роль). Есть CouchDB, подходящая по-своему, забавно.
> А вот оптимального доступа к данным на диске - как-то не видно.
Что есть оптимальный доступ?
> Кстати, Женя может рассказать, как весело бывает жить с большим
> количеством файлов в одной директории. Уж не знаю, относится это к
> доступу к данным - лень лезть и разбираться в реализации.
Тут не надо никуда лезть - это можно сказать азбука.
Директорий это тоже файл, у него тоже есть размер и время на его чтение.
Ко всему прочему во многих файловых системах файл в директории ищется
тривиальным последовательным поиском (на это есть немало причин), то
веселье тут очевидно.
Так вот, насчет доступа к дисковым данным.
Теория на самом деле очень давняя и давно проработанная.
Обычные индексы строятся на сильноветвящихся деревьях, с не полностью
заполненными
страницами индекса.
Если положить размер элемента индекса 10 байт, среднее кол-во
элементов в узле дерева
1000, то до миллиарда элементов можно доступаться за 3 чтения без всяких кэшей.
Или за 2 чтения при условии кэширования первого уровня индекса (10Мб),
т.е. порядка 20-ти мс
или 50 чтений в секунду.
К тому же, если учесть, что с диска имеет смысл читать сразу пол цилиндра
или размер его встроенного кэша, то на самом деле программеру предоставляются
очень немаленькие возможности по оптимизации всего этого хозяйства.
Если положить размер элемента индекса 10 байт, среднее кол-во
элементов в узле дерева
1000, то до миллиарда элементов можно доступаться за 3 чтения без всяких кэшей.
Или за 2 чтения при условии кэширования первого уровня индекса (10Мб),
т.е. порядка 20-ти мс
или 50 чтений в секунду.
К тому же, если учесть, что с диска имеет смысл читать сразу пол цилиндра
или размер его встроенного кэша, то на самом деле программеру предоставляются
очень немаленькие возможности по оптимизации всего этого хозяйства.
Странно, что товарищ, говоря о RAID5, приводит картинку от RAID4.
Странно, что товарищ, говоря о RAID5, приводит картинку от RAID4.
PP> Почему нельзя использовать RAID 5 для сервера базы данных
PP> http://gsbelarus.com/gs/wiki/index.php/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D0%BD%D0%B5%D0%BB%D1%8C%D0%B7%D1%8F_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C_RAID_5_%D0%B4%D0%BB%D1%8F_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85
что-то сколько мы райд не пытались использовать (в разных вариантах) - получалось как в анекдоте "один потерял, а один - сломал"... то оба зеркала навернутся, то один из зеркала навернется, а после вставки отрепайрит чистый винт на винт с данными, то из райда-5 что-то так навернется, что проще убиться, а не искать такие старые винты...
в общем,самое надежное - умный бэкап. Завязал я с райдами, спокойнее теперь живется. Видимо, с ними надо очень тесно жить, их любить и только ими заниматься, чтобы помнить, что надо делать в определенном случае и вообще их лелеять. :)
Счастливо!
Take Care!
--
Александр Чижов (Alexander Chizhov)
mailto:ch...@irk.ru
http://cooler-online.com
> Кстати, Женя может рассказать, как весело бывает жить с большим
> количеством файлов в одной директории.
А большое - это сколько?
(в загашнике вопрос про тип файловой системы).
--
ДТ
(395-2) 51-22-08
> Вообще по сути там надо раскидывать по папкам все, лучше всего через
> webdav вообще чтобы учесть то что серверов может быть много.
> Проще и удобнее чем распредленная фс.
> В итоге имеем урлы типа site.com/cdn/1/images/100/dfs13123sdfsdf.jpg
> где 1 - айди сервера на котором лежит файл (запрос отдается через
> proxy_pass)
И что?
Кстати, какая разница, как выглядит url?
--
ДТ
(395-2) 51-22-08
у японцев, вообще, своя картина мира http://www.toyota.co.jp/
http://www.mufg.jp/
С уважением,
Никитина Юлия
<script type="text/javascript" src="jquery-1.2.3.pack.js"></script>
<script type="text/javascript" src="jquery.dimensions.js"></script>
<script type="text/javascript" src="jquery.tooltip.js"></script>
<script type="text/javascript" src="jquery.mousewheel.js"></script>
<script type="text/javascript" src="ui.mouse.js"></script>
<script type="text/javascript" src="ui.slider.js"></script>
<script type="text/javascript" src="ui.accordion.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="core.js"></script>
<script type="text/javascript" src="en.js"></script>
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="custom.js"></script>
<script type="text/javascript" src="default.js"></script>
<script type="text/javascript" src="thickbox.js"></script>
<script type="text/javascript" src="swfaddress_2_2_ext.js"></script>
<script type="text/javascript" src="productfinder.js"></script>
15.05.09, 13:24, "Evgeniy Potapov" <eapo...@gmail.com>:
--
ДТ
(395-2) 51-22-08