четверг, 25 апреля 2013 г.

Неудачнеги?

Недавно прочитал (и никак не могу найти где) о том, что в отличии от ауотсорсеров, которые зарабатывают для страны порядка миллиарда долларов (на 2011 год, вроде бы), заробитчане пересылают домой порядка трех (на самом деле больше - раз, два). И пока есть такие выехавшие - можно перебиться и без аутсорсинга.
И не то, что стало обидно, но сегодня подумал сравнить эффективность.
Согласно последним (за 2012 год правда) оценкам суммарное количество сотрудников пятерки самых крупных компаний-аутсорсеров порядка 10 тысяч, топ 25 - порядка 20 тысяч. Ну, пусть суммарное всех, вместе с неучтенными, будет 100, даже 200 тысяч (нереально, по-моему).
Согласно другим данным, на заработки выехало около полтора миллиона и больше. Я думаю - порядка трех миллионов.
Тоесть, заробитчан по количеству в раз 10-15 больше, а пересылают они домой только раза в три больше чем аутсорсеры легально наколбасили.
Конечно, в этом, наверное особой заслуги ит-аутсорсеров нет - коньюнктура растущего мирового рынка. Но пока что один  парень сидящий дома в Украине обеспечивает денежный поток в страну в разы больше, чем уехавший на заработки.
И семьи из-за этого не разваливаются, в отличии от заробитчан.

воскресенье, 21 апреля 2013 г.

очень упрощенный конспект книги о Spring Data

Долго сомневался, но все же решил опубликовать краткий конспект того, что вычитал в книге Чтение он не заменит, опыта не добавит, но общее представление о том, что в книге способен дать.
Итак, тезисно:
  1. Причины появления NoSQL: увеличение количества данных, соотношение структуры домена со структурой базы данных (графы как графы, key-value как key-value)
  2. Виды NoSQL баз: key-value (похоже на hashtable), column family (как key-value но value это column), document (структурированные данные, например XML или JSON) и graph (графы, модель данных содержит узлы-nodes и ребра-edges)
  3. Atomicity Consistency Isolation Durability (ACID) в RDBMS заменяется Basically Available Scalable Eventually consistent (BASE) для NoSQL
  4. JPA не подходит как основа общего интерфейса для NoSQL - его спецификация завязана на Object Relational Mapping.
  5. Каждое из хранилищ Spring Data содержит не только одинаковую структурную модель, но и отличия в свойствах и возможностях
  6. Spring Data работает на основе декларативного маркерного обозначения имен элементов архитектуры (классов, интерфейсов, полей данных, методов). Выбор конкретного хранилища определяется в конфигурации приложения (например, @EnableJpaRepositories или jpa:repositories base-package="..." если используется XML-конфиг).
  7. Методы интерфейса для работы с определенным доменным класом (например, Client) определяются или полностью пользователем (через запрос @Query для выполнения), или путем расширения интерфейсов Spring Data.
    Repository - простой маркерный интерфейс для пометки для Spring Data определяемого пользователем репозитория.
    CrudRepository расширяет Repository основными методами объектно-реляционной модели - поиском, сохранением и удалением сущностей.
    PagingAndSortingRepository расшираяет CrudRepository методами распределения по страницам и сортировкой.
  8. Пользователь может сам определять новые интерфейсы для репозиториев согласно своему представлению архитектуры приложения. Для этого интерфейс необходимо пометить как @NoRepositoryBean если интерфейс будет наследоваться от существующего интерфейса репозиториев, или создать свой собственный интерфейс и его реализацию согласно соглашения по именованию (например, ClientRepositoryCustomization и ClientRepositoryCustomizationImpl)
  9. Имена методов интерфейсов репозитория должны соответствовать верблюжемуРегистру и основываться на запроектированных шаблонах чтобы Spring Data их распознал, или полагаться на прилагаемое Query.
    Например,
    Client findByFirstname(String firstname) - найти клиента Client по его полю данных firstname,
    List findByAddress_ZipCode(ZipCode zipCode) - найти список клиентов по почтовому коду, который содержит его поле данных - адрес address,
    List findByEmailAndLastname(EmailAddress email, String lastname) - найти список клиентов по почтовому адресу и фамилии.
    Если держаться за конвенцию именования, то Spring Data генерирует нужный запрос Query.
  10. Spring Data поддерживает интеграцию с Querydsl. который позволяет обобщенно составлять запросы к JPA, Hibernate, JDO, native JDBC, Lucene, Hibernate Search, и MongoDB. Похоже на попытку сделать нечто подобное LINQ, но для java. Не понравилось - Eclipse не подхватил даже с танцами, Intellij Idea разобралась, но осадочек остался. По-моему, шаг с отдельной автогенерацией запросов не удобный. Вот разве что если запросов в проекте много, и их все надо поддерживать в удобочитаемом виде?
  11. MongoDB - хранилище документов в формате BSON - бинарного расширения JSON.
  12. Neo4J - база данных графов, состоит из вершин и их отношений.
  13. Redis - key-value база данных.
  14. Spring Roo - проект SpringSource для управления кодом и его созданием.
  15. Spring REST Exporter - проект SpringSource для доступа к основанным на JPA репозиториям через REST-интерфейс.