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