Elasticsearch null value

24 Şub

Elasticsearch üzerinde null değerler index üzerine eklenemez ve aranamaz. Yani property değeri null olan kayıtları getirmek için bir sorgu yazdığınızda doğru cevap alınamaz. Bir alan null olarak girildiğinde, o alanın değeri yokmuş gibi değerlendirilir. Bir alan boş bir dizi olarak girildiğinde de yokmuş gibi değerlendirilir.

Örneğin, aşağıdaki sorguda, name değeri null olan kayıtlar alınamaz.

GET products-idx/_search
{
  "query": {
    "term": {
      "name": null 
    }
  }
}

Bu gibi durumlarda, index mapping oluşturulurken, alana ait property ayarlarında null_value parametresi ile null yerine bir değer atanır.

PUT products-idx
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword",
        "null_value": "NULL" 
      }
    }
  }
}

Burada, null olarak gelen name değerleri, “NULL” ile değiştirilmiştir. Bu sayede NULL şeklinde arama yapmak mümkün hale gelmektedir. Aşağıdaki şekilde yeni değerler eklendiğinde;

PUT products-idx/_doc/1
{
  "name": null
}

PUT products-idx/_doc/1
{
  "name": []
}

Artık aşağıdaki gibi arama yapılabilmektedir.

GET products-idx/_search
{
  "query": {
    "term": {
      "name": "NULL" 
    }
  }
}

Boş diziler null değere sahip olmadığı için “NULL” ile değiştirilmez. Bu sorgunun sonucunda 1 numaralı doküman elde edilir ancak 2 numaralı doküman elde edilemez.

Not: null_value değeri alan veri tipi ile uygun olmalıdır. Örneğin long tipinde bir alana string tipinde null_value değeri atanamaz.

Not: null_value yalnızca verilerin index’e alınma şeklini etkiler, _source dokümanını değiştirmez.

PostgreSQL Database ve Table Boyutları

21 Şub

PostgreSQL veri tabanında zamanla veri boyutları artar ve disklerdeki boş alanlar azalır. Bakım yapılmak istendiğinde öncelikle tüketilen kaynaklar öğrenilmelidir.

  • Veritabanı disk üzerinde ne kadar yer kaplıyor.
  • Tablola disk üzerinde ne kadar yer kaplıyor.

Veritabanı toplam boyutunu veren sorgu;

select pg_size_pretty(pg_database_size('my_db'));

Bir tablonun boyutunu veren sorgu;

select pg_size_pretty(pg_total_relation_size('my_table'));

Bazı şemalardaki tablolara ait boyutları veren sorgu;

SELECT schemaname,
       tablename,
       pg_size_pretty(
           pg_total_relation_size(
               schemaname || '.' || tablename
           )
       ) size
FROM pg_catalog.pg_tables
WHERE schemaname in ('my_schema1', 'my_schema2')
ORDER BY schemaname, tablename;