понедельник, 4 декабря 2017 г.

MongoDB. Сравнение двух коллекций

Функция для MongoDB которая позволяет найти все ID документов в одной коллекции которых нехватает в другой.
    function compareCollections(col1, col2){
        if(col1.count() == col2.count()){
            return "completed";
         }
 
        if (col1.count() < col2.count()) {
            temp = col1;
            col1 = col2;
            col2 = temp;
        }

        var compared = col1.find().forEach(function(doc1){
            var doc2 = col2.findOne({_id: doc1._id});

            if (doc2 == null) {
                print(doc1._id);
            }
        });
        return "completed";
    }
Если одна коллекция расположена в другой базе то получить ссылку на нее можно следующим образом:
    col1 = connect(host+":27017/"+dbName1).getCollection(colName1);

среда, 4 октября 2017 г.

Индивидуальные настройки maven для проекта

До версии 3.3.1 в Maven небыло возможным установить параметры либо JVM сваойства для запуска Maven для каждого проекта индивидуально.
Начиная с Maven 3.3.1 можно создать в корне проекта директорию .mvn и положить туда файл maven.config или jvm.config с конфигурацией.

Например нет необходимости каждый раз писать
mvn -T3 -U --fail-at-end clean package
достаточно в ${maven.projectBasedir}/.mvn/maven.config добавить строку
-T3 -U --fail-at-end
которая автоматически будет добавляться к команде запуска maven.

понедельник, 2 октября 2017 г.

Установить System свойство через Spring

Очень полезный трюк который помог мне установить System properties в веб приложении.
Для этого надо добавить в xml конфигурацию следующий код:
<bean>
    <property name="targetClass" value="java.lang.System"/>
    <property name="targetMethod" value="setProperty"/>
    <property name="arguments">
      <list>
        <value>your_value1</value>
        <value>your_value2</value>
      </list>
    </property>
</bean>

четверг, 17 августа 2017 г.

Изменения в HashMap в Java 8.

В Java 8 изменился способ хранения хэшей ключей в java.util.HashMap. Теперь когда количество элементов больше определенного значения
static final int TREEIFY_THRESHOLD = 8
то для хранения хэшей используется сбалансированное дерево вместо связанного списка. Это дает улучшение производительство в наихудшем случае с O(n) до O(log n).  При уменьшении количества элементов до
static final int UNTREEIFY_THRESHOLD = 6
дерево заменяется на связанный список

четверг, 22 октября 2015 г.

"Best practices" для cоздания индексов в MongoDB

Приведу ряд "best practices" для индексов в MongoDB направленные на улучшение производительности.

Один индекс для каждого запроса.

    MongoDB может использовать только один индекс для любого запроса. Хотя в MongoDB 2.6 появилось пересечение индексов которое позволяет использовать два индекса для выборки, но есть целый ряд нюансов когда пересечение индексов не работает поэтому одиночный и составной индекс остаются более простыми в управлении и оптимизации.

вторник, 3 марта 2015 г.

Методы класса Preconditions в библиотеке Guava.

Это первый пост из серии постов описывающих функционал библиотеки google guava.

Guava предоставляет методы служащие для проверки условий и генерации исключения в случае если это условие не выполняется.

Каждый метод имеет три варианта:
  • Без дополнительных  аргументов. Метод просто выбрасывает исключение, без сообщения об ошибке.
  • Дополнительный аргумент  типа String  который будет использоваться как сообщение об ошибке в выбрасываемом исключении.
  • Дополнительный  аргумент который будет подставлен в шаблон сообщени;
 checkArgument(i >= 0, "Argument was %s but expected nonnegative", i); 

четверг, 22 января 2015 г.

Прототип Spring Boot приложения в два клика.



Конструктор для создания прототипа maven или gradle приложения можно найти тут 
Заполняем необходимы поля, выбираем пакеты которые будем использовать в приложении и нажимаем “Generate Project”. На выходе получаем архив с нашим прототипом.