хочу начать программировать [закрытый]

Чтобы ответить на ваш вопрос, да, это самый эффективный способ. Но я думаю, что нам нужно выяснить, почему это так.

Как было предложено в альтернативах, люди, на которые люди смотрят, «сортируют» ваши результаты, прежде чем перейти на стадию $group и что они смотрят на значение «timestamp», поэтому вы хотите убедиться, что все находится в порядке «timestamp», поэтому отсюда:

db.temperature.aggregate([
    { "$sort": { "station": 1, "dt": -1 } },
    { "$group": {
        "_id": "$station", 
        "result": { "$first":"$dt"}, "t": {"$first":"$t"} 
    }}
])

И, как указано, вы, конечно, захотите индекс, чтобы отразить это, чтобы сделать сортировку эффективной:

Однако, и это реальная точка. То, что, по-видимому, было упущено другими (если не так для себя), состоит в том, что все эти данные, вероятно, будут вставлены уже в порядке времени, поскольку каждое чтение записывается как добавленное.

Таким образом, красота этого это поле _id (с по умолчанию ObjectId) уже находится в порядке «timestamp», поскольку оно фактически содержит значение времени, и это делает возможным утверждение:

db.temperature.aggregate([
    { "$group": {
        "_id": "$station", 
        "result": { "$last":"$dt"}, "t": {"$last":"$t"} 
    }}
])

И это быстрее. Зачем? Ну, вам не нужно выбирать индекс (дополнительный код для вызова), вам также не нужно «загружать» индекс в дополнение к документу.

Мы уже знаем, что документы в порядке ( на _id), поэтому границы $last совершенно верны. Вы все равно сканируете все, и вы также можете «задавать» запрос по значениям _id одинаково допустимым для двух дат.

Единственное, что можно сказать здесь, это то, что в «реальном мире», использование, это может быть более практичным для вас $match между диапазонами дат при выполнении такого рода накопления в отличие от получения значений «первый» и «последний» _id для определения «диапазона» или чего-то подобного в ваше фактическое использование.

Итак, где доказательство этого? Ну, это довольно легко воспроизвести, поэтому я просто сделал это, создав некоторые примеры данных:

var stations = [ 
    "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL",
    "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA",
    "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE",
    "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK",
    "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT",
    "VA", "WA", "WV", "WI", "WY"
];


for ( i=0; i<200000; i++ ) {

    var station = stations[Math.floor(Math.random()*stations.length)];
    var t = Math.floor(Math.random() * ( 96 - 50 + 1 )) +50;
    dt = new Date();

    db.temperatures.insert({
        station: station,
        t: t,
        dt: dt
    });

}

На моем оборудовании (ноутбук 8 ГБ со спиннивным диском, который не является звездным, но, безусловно, адекватным) форма заявления четко показывает заметную паузу с версией, используя индекс и сортировку (те же ключи в индексе, что и оператор сортировки). Это лишь незначительная пауза, но разница достаточно значительна, чтобы заметить.

Даже глядя на вывод объяснения (версия 2.6 и выше, или на самом деле есть в 2.4.9, хотя и не задокументирована), вы можете видеть разница в этом, хотя $sort оптимизирована из-за наличия индекса, время, которое, как представляется, относится к выбору индекса, а затем загружает индексированные записи. Включение всех полей для «охватываемых» запросов индекса не имеет значения.

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

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

Но если вы были довольны использованием _id или больше, чем «последний» _id в вашем запросе, а затем, возможно, одна настройка, чтобы получить значения вместе с вашими результатами, чтобы вы могли хранить и использовать эту информацию в следующих запросах:

db.temperature.aggregate([
    // Get documents "greater than" the "highest" _id value found last time
    { "$match": {
        "_id": { "$gt":  ObjectId("536076603e70a99790b7845d") }
    }},

    // Do the grouping with addition of the returned field
    { "$group": {
        "_id": "$station", 
        "result": { "$last":"$dt"},
        "t": {"$last":"$t"},
        "lastDoc": { "$last": "$_id" } 
    }}
])

И если вы на самом деле «следили» за такими результатами, вы можете определить максимальное значение ObjectId из ваших результатов и использовать его в следующем запросе.

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

23
задан Earlz 20 April 2010 в 16:04
поделиться

20 ответов

Visual Studio Express доступен бесплатно от MS и идеально подходит для начала работы.

47
ответ дан Dan Bryant 29 November 2019 в 00:37
поделиться

Я бы рекомендовал начать с них.

http://channel9.msdn.com/Series/Visual-Basic-Development-for-Absolute-Beginners http://channel9.msdn.com/Series/ C-Sharp-Fundamentals-Development-for-Absolute-Beginners

Они охватывают самое необходимое для начала программирования. Когда я впервые решил серьезно заняться программированием (не так давно), это было бы идеально.

Лично я считаю, что видео - отличное начало в обучении. Использование зрения и звука прекрасно работает. После этого, когда вы застряли, библиотека MSDN также станет отличным ресурсом с множеством объяснений, учебных пособий и примеров.

http://msdn.microsoft.com/en-us/library/ms123401.aspx

Регулярно регистрируйтесь в MSDN http://msdn.microsoft. com / en-za / , в котором есть все необходимое для начала работы.

И, наконец, выберите проект для начала. То есть, подумайте о приложении, которое вы хотели бы или сделаете, и создайте его. Ничто не является на вкус более похожим на шоколадный торт, чем развертывание вашей первой - заядлой - программы. Поиск приложений с открытым исходным кодом для сравнения ваших тоже хорошо работает в этих ситуациях. Здесь вы найдете множество приложений с открытым исходным кодом:

http://codeplex.com И http://sourceforge.net

Happy Coding !

0
ответ дан Red Rubicon 29 November 2019 в 00:37
поделиться

Цель C не так проста, как первый язык, но она не так сложна, и у нее есть то преимущество, что на данный момент программирование для iPhone «сексуально» и «весело» и потенциально коммерчески полезно для вас. Кроме того, в iTunes U есть множество обучающих видео (поищите «Стэнфорд» в iTunes).

XCode для разработки для iPhone можно загрузить бесплатно после регистрации на developer.apple.com.

0
ответ дан h4xxr 29 November 2019 в 00:37
поделиться

Я бы порекомендовал RapidQ . Это бесплатный полуобъектно-ориентированный язык программирования BASIC для Windows и Linux. ИМХО, это один из самых простых языков для изучения и использования (проще, чем VB, например). Он поставляется с компилятором, IDE и графическим дизайнером графического интерфейса. Однако, это не слишком сильно отличается от VB.

К сожалению, RapidQ больше не разрабатывается, но есть активное сообщество пользователей в Yahoo Groups . В разделе «Файлы» этой группы вы можете скачать компилятор / IDE, а также несколько расширений и примеры приложений.

0
ответ дан PauliL 29 November 2019 в 00:37
поделиться

Для C ++ используйте Dev-C ++ от Bloodshed Software; супер чистый и простой в использовании. http://www.brothersoft.com/dev-c++-download-65296.html

Для Python просто используйте IDE, которую они предоставляют. Супер чистый и полезный. http://www.python.org/download/

0
ответ дан Befall 29 November 2019 в 00:37
поделиться

Если вы не хотите работать с VS Express, есть SharpDevelop с открытым исходным кодом, который очень хорош. Но я согласен с тем, что сказали другие, что вы можете проверить свой начальный язык обучения. Определенные языки работают хорошо для выполнения определенных типов программирования. Я всегда думал, что Java - хороший язык для начала, потому что есть МНОГИЕ инструменты, которые его поддерживают, и множество учебных пособий, если вы застряли где-то.

1
ответ дан Blaine Mucklow 29 November 2019 в 00:37
поделиться

Как уже говорили другие, редакция Visual Studio Express является бесплатной, и есть более новые версии, чем 2005. 2010 должен скоро выйти (если он еще не доступен).

1
ответ дан FrustratedWithFormsDesigner 29 November 2019 в 00:37
поделиться

Если вы хотите начать программирование с использованием C #, C ++, Visual Basic.NET, F # и pals , VS Express - это, безусловно, путь.

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

Я не знаю, какой будет окончательная IDE для C и Python, но я справляюсь с Eclipse для первого и простым текстовым редактором с общим завершением и поддержкой iPython для последнего.

2
ответ дан badp 29 November 2019 в 00:37
поделиться

Visual Studio 2005 слишком стар для вас. Начните обучение на 2010 и .NET 4. И получите Express версию с этого места http://www.microsoft.com/express/

4
ответ дан Svisstack 29 November 2019 в 00:37
поделиться

Вы также можете скачать последнюю версию Eclipse IDE и попробовать Java.

6
ответ дан Jay 29 November 2019 в 00:37
поделиться

Если вы никогда раньше не занимались программированием, то я бы рекомендовал не переходить прямо в Visual Studio и язык .net. Количество вещей, которые вам придется изучить, чтобы начать писать код, слишком велико.

Начните с простого языка, такого как Python. Отредактируйте свой код в блокноте и запустите его в командном окне. Напишите несколько простых программ для генерации вывода и считывания ввода с клавиатуры. Наращивание медленно.

Когда вы накопите немного знаний, попробуйте использовать тот же подход с c # или vb.net. Затем изучите Visual Studio и поиграйте с winforms или wpf.

Удачи!

7
ответ дан Andy Johnson 29 November 2019 в 00:37
поделиться

Если вы начинаете программировать, экспресс-выпуск Visual Studio должен быть достаточно далеко, чтобы обнаружить C #.

Вы можете найти последние версии Express здесь .

7
ответ дан Thibault Falise 29 November 2019 в 00:37
поделиться

Мой путь (на данный момент):

Из программирования я не выбрал Java для чайников, а затем перешел в Head First Java. Я обнаружил, что мне нужна книга «Манекены», и обнаружил, что книга «Head First» помогла мне понять некоторые ключевые концепции (такие как наследование и другие забавные ОО) и привела отличные примеры.

Однако проблема с ОО-языком может заключаться в том, что вам также необходимо понимать множество ОО-понятий. Я прыгнул прямо в Java, но в ретроспективе, возможно, мне следовало начать с Python или C, сначала получить представление о структурах данных / циклах и т. Д., ТОГДА перейдя к ОО.

Я лично рекомендую использовать IDE, чего нет в некоторых книгах, но если вы не умеете собирать опечатки, импортировать операторы и т. Д. Я обнаружил, что использование только блокнота только раздражало меня.

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

C # хорош для работы, где я живу, так же как и Java и C ++. После того, как вы освоите свой родной язык, вы можете осмотреться и узнать что-то новое в зависимости от области, в которой вы хотите работать / программировать, например, для Web, бизнес-приложений. и т.д., если вы не делаете это просто для хобби. Если нет, подумайте, чего хочет рынок.

Надеюсь, это поможет ^ _ ^

9
ответ дан Selenia 29 November 2019 в 00:37
поделиться

Вы можете начать с Visual Studio Express - это бесплатно

13
ответ дан wassertim 29 November 2019 в 00:37
поделиться

Я согласен с Джеем: я не думаю, что есть какая-либо причина покупать инструменты разработки, когда есть широко доступные бесплатные инструменты / языки.

Наряду с его предложением Java, я бы сказал, оформить заказ Руби !

Лично я считаю, что рубин проще всего начинать с коробки. Вам не нужно беспокоиться о компиляторах или IDE. Любой текстовый редактор работает, и irb (Interactive Ruby) - находка для обучения.

Я нахожу, что немного лучше иметь хорошую консоль (то есть в Linux / Unix и OSX), чтобы по-настоящему увидеть преимущества IRB, но я считаю, что в Windows есть что-то похожее ??

Самое приятное, что это бесплатно, и если вы ищете для создания веб-приложений, Rails , вероятно, самая простая среда, которую вы можете найти для создания динамических веб-приложений.

3
ответ дан brad 29 November 2019 в 00:37
поделиться

Или, если вы хотите перейти на несколько платформ, попробуйте MonoDevelop . Не такой продвинутый, как Visual Studio (пока), но, безусловно, достаточно, чтобы научиться программировать.

5
ответ дан 29 November 2019 в 00:37
поделиться

Ответ взят из здесь

Вы можете бесплатно загрузить Visual Studio Express Edition , а также получить доступ к Библиотека MSDN бесплатна. Также существует Sql Server Express edition , которая также бесплатна.

Добавьте к этому все замечательные бесплатные онлайн-ресурсы, такие как stackoverflow, asp.net , codeproject , блоги и т. Д., И вы готовы к работе.

2
ответ дан 29 November 2019 в 00:37
поделиться

Как говорили другие: Visual Studio Express отлично подходит для начала и, что самое главное, совершенно бесплатна.

Если у вас есть предыдущий опыт программирования, выучить C # достаточно легко. Если вы новичок в программировании, вам может показаться, что Visual Basic намного проще. Неважно, какой язык вы выберете, главное, чтобы он вам удобен.

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

Удачи!

0
ответ дан 29 November 2019 в 00:37
поделиться

ИМХО, покупка VS 2005 - ужасная идея. Учитесь с помощью бесплатных инструментов. Версия сообщества Intellij IDEA потрясающая ... и бесплатная.

Все зависит от того, с чего вы хотите начать: Java, Python, Ruby, C, C ++, C # ... Просто погрузитесь и получайте удовольствие.

0
ответ дан 29 November 2019 в 00:37
поделиться

Подсказка:

Простая покупка пакета Visual Studio и попытка его использования может быть упражнением, которое заставит ваш мозг взорваться. По крайней мере, так было, когда я начинал.

Я бы нашел друга, который хорошо преподает, который поможет вам начать работу, или возьму курс программирования 101 в местном колледже (общественные или технические колледжи идеально подходят для таких вещей). Или возьмите хороший учебник в Интернете или книгу. Это действительно лучший способ начать работу, так как они могут указать вам правильное направление. Программное обеспечение Visual Studio очень сложно, если вы не знакомы с входящими в него концепциями программирования.

Кроме того, найдите что-нибудь интересное, чтобы написать, что решит ваши проблемы:

  • Программа, которая вычисляет траекторию пейнтбола
  • Генератор кубиков D&D, когда вы забываете свои кости
  • Инструменты для управления вашим iPod
  • и т. Д.
7
ответ дан 29 November 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: