2021 yılında yazılım geliştirme teknolojilerinde popülerliğini koruyan teknolojilerden biri de Java’dır.
Java, ağ uygulamalarının temelini oluşturarak gömülü ve mobil uygulamalar, oyunlar, web tabanlı yazılım geliştirme için küresel standarttır. Dünya genelinde 9 milyonu aşan geliştiriciye sahip olan Java, heyecan verici uygulamaları verimli bir şekilde geliştirmenize olanak sağlar.

Yüksek performanslı bir veri erişim katmanı, veritabanı dahili bileşenleri, JDBC, JPA, Hibernate hakkında çok fazla bilgi gerektirir

Bu yazıda, dünya üzerinde köklü bir geçmişe sahip Java uygulamalarınızı optimize etmek için kullanabileceğiniz en önemli tekniklerden bazılarını özetleyeceğiz.

 SQL statement logging

Sizin adınıza ifadeler oluşturan bir framework kullanıyorsanız, yürütülen her ifadenin etkinliğini ve verimliliğini her zaman doğrulamanız gerekir.
Bir test zamanı mekanizması ile daha iyi N + 1 sorgu sorunları yakalayabilirsiniz.

Connection management

Veritabanı bağlantıları pahalıdır, bu nedenle her zaman bir bağlantı havuzu mekanizması kullanmalısınız.

Bağlantı sayısı, temel alınan veritabanı kümesinin yetenekleri tarafından verildiğinden, bağlantıları olabildiğince hızlı bir şekilde serbest bırakmanız gerekir.

Performans ayarında her zaman ölçmeniz gerekir ve doğru havuz boyutunu ayarlamak da farklı değildir. FlexyPool gibi bir araç , uygulamanızı üretime yerleştirdikten sonra bile doğru boyutu bulmanıza yardımcı olabilir.

JDBC batching

JDBC batching, tek bir veritabanı gidiş dönüş içinde birden çok SQL ifadesi göndermemize olanak tanır.

JDBC, gruplama için ayrı bir API tanımladığından ifadeleri manuel olarak oluşturuyorsanız, toplulaştırmayı kullanıp kullanmamanız gerektiğini en başından bilmelisiniz. Hazırda Bekletme ile tek bir yapılandırmayla toplu işleme geçebilirsiniz .

Hazırda Bekletme 5.2, session düzeyinde toplu işleme sunar, bu nedenle bu konuda daha da esnektir.

Statement caching

İfade önbelleğe alma, kolayca yararlanabileceğiniz en az bilinen performans optimizasyonlarından biridir. Temeldeki JDBC Sürücüsüne bağlı olarak, hem istemci tarafında (sürücü) hem de veritabanları tarafında (sözdizimi ağacı veya hatta yürütme planı) önbelleğe alabilirsiniz.

Hibernate identifiers

Hibernate identifiers modunu kullanırken, Identity JDBC gruplamasını devre dışı bıraktığı için oluşturucu iyi bir seçim değildir.
Table oluşturucu daha da kötüdür, çünkü her yeni tanımlayıcıya ihtiyacımız olduğunda ayrı bir bağlantı gerektiğinden, temel işlem günlüğüne ve bağlantı havuzuna baskı uygulayabilen yeni bir tanımlayıcı getirmek için ayrı bir işlem kullanır.
Sequence doğru seçimdir ve hatta SQL Server 2012 sürümünden beri desteklemektedir.

Column types

Veritabanı tarafında her zaman doğru sütun türlerini kullanmalısınız. Sütun türü ne kadar kompakt olursa, veritabanı çalışma kümesinde o kadar fazla giriş yer alabilir ve dizinler belleğe daha iyi sığar. Hibernate yeni bir özel Type uygulaması söz konusu olduğunda çok esnek olduğundan, veritabanına özgü türlerden (örneğin PostgreSQL’deki IPv4 adresleri için) yararlanmalısınız.

Relationships

Hibernates, birçok ilişki eşleme türüyle birlikte gelir ancak bunların tümü verimlilik açısından eşit değildir.

Tek yönlü koleksiyonlardan ve @ManyToMany Liste(ler)den kaçınılmalıdır. Varlık koleksiyonlarını gerçekten kullanmanız gerekiyorsa, çift yönlü @OneToMany ilişkilendirmeler tercih edilir. @ManyToMany ilişki için, set kullanmak bu durumda daha verimlidir veya basitçe yanı bağlantılı birçok çoğa tabloyu harita ve dönüş @ManyToMany iki yönlü içine ilişkiyi @OneToMany destekler.

Bununla birlikte, sorguların aksine, koleksiyonlar daha az esnektir, çünkü kolayca sayfalandırılamazlar. Bu nedenle bir koleksiyonun gerçekten gerekli olup olmadığını her zaman sorgulamalısınız. Bir varlık sorgusu birçok durumda daha iyi bir alternatif olabilir.

Inheritance

Kalıtım söz konusu olduğunda, nesne yönelimli diller ve ilişkisel veritabanları arasındaki empedans uyumsuzluğu daha da belirgin hale gelir. JPA, SINGLE_TABLE, JOINED, ve TABLE_PER_CLASS kalıtım eşleme ile başa çıkmak için sunar ve bu stratejilerin her birinin artıları ve eksileri vardır.

Persistence Context size

JPA ve Hibernate kullanırken, Persistence Context boyutuna her zaman dikkat etmelisiniz. Bu nedenle, onu asla tonlarca yönetilen varlıkla yönetmemelisiniz. Yönetilen varlıkların sayısını kısıtlayarak daha iyi bellek yönetimi elde ediyoruz ve varsayılan kirli kontrol mekanizması da daha verimli olacaktır.

Caching

İlişkisel veritabanı sistemleri, disk erişimini önlemek için birçok bellek içi arabellek yapısı kullanır. Veritabanı önbelleğe alma genellikle gözden kaçar. Veritabanı motorunu düzgün bir şekilde ayarlayarak, çalışma kümesinin bellekte kalması ve her zaman diskten getirilmemesi için yanıt süresini önemli ölçüde azaltabiliriz.

Uygulama düzeyinde önbelleğe alma, birçok kurumsal uygulama için isteğe bağlı değildir. Uygulama düzeyinde önbelleğe alma, veritabanı bakım nedeniyle veya bazı ciddi sistem arızaları nedeniyle kapalı olduğunda salt okunur bir ikincil depo sunarken yanıt süresini azaltabilir.

İkinci düzey önbellek, özellikle Tek Birincil Çoğaltma mimarilerinde , okuma-yazma işlemi yanıt süresini azaltmak için çok kullanışlıdır . Uygulama gereksinimlerine bağlı olarak, READ_ONLY , NONSTRICT_READ_WRITE , READ_WRITE ve TRANSACTIONAL arasında seçim yapmanıza olanak tanır.