Рубрики
Без рубрики

Высокопроизводительная Сохраняемость Java – Часть Первая

Автор оригинала: Vlad Mihalcea.

Четыре месяца, одна неделя и два дня и 114 страниц; именно столько потребовалось, чтобы написать первую часть Высокопроизводительная сохраняемость Java книги.

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

Прежде чем объяснить, о чем идет речь в этой первой части, лучше взглянуть на ее содержание:

1. Preface
1.1 The database server and the connectivity layer
1.2 The application data access layer
1.2.1 The ORM framework
1.2.2 The native query builder framework
2. Performance and Scaling
2.1 Response time and Throughput
2.2 Database connections boundaries
2.3 Scaling up and scaling out
2.3.1 Master-Slave replication
2.3.2 Multi-Master replication
2.3.3 Sharding
3. JDBC Connection Management
3.1 DriverManager
3.2 DataSource
3.2.1 Why is pooling so much faster?
3.3 Queuing theory capacity planning
3.4 Practical database connection provisioning
3.4.1 A real-life connection pool monitoring example
3.4.1.1 Concurrent connection request count metric
3.4.1.2 Concurrent connection count metric
3.4.1.3 Maximum pool size metric
3.4.1.4 Connection acquisition time metric
3.4.1.5 Retry attempts metric
3.4.1.6 Overall connection acquisition time metric
3.4.1.7 Connection lease time metric
4. Batch Updates
4.1 Batching Statements
4.2 Batching PreparedStatements
4.2.1 Choosing the right batch size
4.2.2 Bulk operations
4.3 Retrieving auto-generated keys
4.3.1 Sequences to the rescue
5. Statement Caching
5.1 Statement lifecycle
5.1.1 Parser
5.1.2 Optimizer
5.1.2.1 Execution plan visualization
5.1.3 Executor
5.2 Caching performance gain
5.3 Server-side statement caching
5.3.1 Bind-sensitive execution plans
5.4 Client-side statement caching
6. ResultSet Fetching
6.1 ResultSet scrollability
6.2 ResultSet changeability
6.3 ResultSet holdability
6.4 Fetching size
6.5 ResultSet size
6.5.1 Too many rows
6.5.1.1 SQL limit clause
6.5.1.2 JDBC max rows
6.5.1.3 Less is more
6.5.2 Too many columns
7. Transactions
7.1 Atomicity
7.2 Consistency
7.3 Isolation
7.3.1 Concurrency control
7.3.1.1 Two-phase locking
7.3.1.2 Multi-Version Concurrency Control
7.3.2 Phenomena
7.3.2.1 Dirty write
7.3.2.2 Dirty read
7.3.2.3 Non-repeatable read
7.3.2.4 Phantom read
7.3.2.5 Read skew
7.3.2.6 Write skew
7.3.2.7 Lost update
7.3.3 Isolation levels
7.3.3.1 Read Uncommitted
7.3.3.2 Read Committed
7.3.3.3 Repeatable Read
7.3.3.4 Serializable
7.4 Durability
7.5 Read-only transactions
7.5.1 Read-only transaction routing
7.6 Transaction boundaries
7.6.1 Distributed transactions
7.6.1.1 Two-phase commit
7.6.2 Declarative transactions
7.7 Application-level transactions
7.7.1 Pessimistic and optimistic locking
7.7.1.1 Pessimistic locking
7.7.1.2 Optimistic locking

Первая часть посвящена устранению разрыва между разработчиком приложений и администратором базы данных. Эта книга посвящена доступу к данным, и для этой цели в ней объясняется внутренняя работа как ядра базы данных, так и драйверов JDBC четырех наиболее распространенных реляционных баз данных (Oracle, SQL Server, MySQL и PostgreSQL).

Я объясняю, что означает производительность и масштабируемость, а также тонкая связь между временем отклика и пропускной способностью. Будучи большим поклонником Нила Дж. Гюнтера, я не мог не написать о Универсальном законе масштабируемости и как этому уравнению удается связать емкость с конвенцией и согласованность

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

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

Кэширование инструкций очень важно для высокопроизводительных корпоративных приложений, как на стороне сервера, так и на стороне клиента. В этой книге объясняется, как кэширование операторов реализовано в наиболее распространенных СУБД и как вы можете активировать эту оптимизацию с помощью API JDBC.

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

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

Существует также примерная глава, которую вы можете прочитать бесплатно и получить представление о том, что может предложить вам эта книга. Образец главы можно прочитать онлайн или загрузить в формате PDF , моби или epub (как и в настоящей книге).

Наслаждайтесь чтением и дайте мне знать, что вы думаете.