Json Formatında Veritabanı

{
	"metadata":{
		"tables":["örnek_tablo"],
		"data-types":{
			"örnek_tablo":{
				"col0":"int",
				"col1":"str",
				"col2":"str"
			}
		},
		"attributes":{
			"örnek_tablo":{
				"col0":[
					"AUTOINCREMENT",
					"UNIQUE"
				],
				"col1":[],
				"col2":[]
			}
		}
	},
	"tables":{
		"örnek_tablo":{
			"cols":[
				"col0",
				"col1",
				"col2"
			],
			"rows":[
				[
					"data0.0",
					"data0.1",
					"data0.2"
				],
				[
					"data1.0",
					"data1.1",
					"data1.2"
				]
			]
		}
	}
}`

Arkadaşlar bu şekilde bir json dosyasını, işleyecek bir veritabanı istemcisi yazılabilirmi?

Ne demek istediğini tam olarak anlamadım ama Redis, mongodb ve genel olarak birçok nosql veritabanı bu işi yapıyor zaten.

yani veriyi binary dosyalarında değil düz metin dosyalarında depolayacağı ve Json’un minimalize edilebilme özelliği sayesinde aynı veriyi daha küçük disk alanında depolanabilir olacak

Json’ı istediğiniz kadar minify edin binary dosyalar her zaman daha küçük olur json çok temiz ve okunaklı bir format ama depolaması kesinlikle küçük değil. Zaten amacı da etkili bir veri tutma formatı olmak değil veri aktarma ve değiştirme formatı olmak. Yani Api’niz ile browserınızı json ile konuşturmak iyi bir fikir ama text dosyalarında json veri saklamak iyi bir fikir değil.(json field, ya da nosql veritabanlarından bahsetmiyorum onlar ayrı bir dünya) Siz redis ve nosql veritabanlarına bir bakın derim. Ayrıca genel olarak rdbms’lerin iç yapılarını anlatan bir tutorial takip edebilirsiniz çünkü bazı temel konseptlerde eksikleriniz olabilir sanırım.

Merak ettim denedim(içerdikleri veriler aynı):


Gerçi veri boyutu arttıkça ne olur bilimem

Merhaba,

Bu mesajda bahsedeceklerim sizin işinize yarar mı emin değilim. Ama yine de paylaşmama izin verin.

Sıkça ziyaret ettiğim bir site (https://www.astro.com) offline veritabanını XML formatında sunuyor. Bu XML dosyasındaki verilerin çalışmam için gereksiz olan kısımlarını attıktan ve içine ilave satırlar ekledikten sonra bir JSON dosyasına kaydettim. Bu JSON dosyasında 3,135,264 adet satır, 65239 adet kayıt var ve boyutu 74 MB. XML formatında tutulan orijinal veritabanındaki satır sayısı 3,223,956, kayıt sayısı % 99.9 aynı ve boyutu 196 MB.

Ancak bu iki dosyanın yüklenme hızları arasında ciddi farklar var. JSON formatında tutulan bilgiler aslında Python’ın primitif veri tipleri ve doğrudan ya bir liste, ya bir demet verisi ya da bir sözlük elde ediyorsunuz. Aynı durum XML için geçerli değil tabi, Python’ın ham veriyi alması için önce XML dosyasını parse edip tagları ortaya çıkartması gerekiyor. Daha sonradan ham verileri etiketleri kullanarak alabiliyoruz ve bu da beklemeye neden oluyor. Oysa programa JSON verilerini yüklemeye çalıştığımda hiç bir bekleme gerçekleşmiyor.

JSON’nun, XML’ye karşı ne kadar üstün olduğunu zaten biliyorum; yine teşekkür ederim. :slight_smile:

Bu çok yanlış bir karşılaştırma.

Bir database dosyasının içinde boşken bile sadece sizin koyduğunuz veriler yok tabiki. Veritabanları sandığınız kadar basit uygulamalar değil çok çok karmaşık ve büyük programlar. Bu şekilde bir kıyas yapamazsınız yani. Ayrıca içerdikleri veriler aynı derken nasıl aynı? İlişkisel bir veritabanında json field kullanmadığınız sürece direk olarak json depolayamazsınız sadece tablolar vardır.

1 Beğeni

Yani en nihayetinde her ikisinde de şu veriler var:
image

Amaç verinin diskte kapladığı alanı küçültmek ise JSON’dan daha iyi yöntemler var.

Asıl problem bu verilerin ne şekilde kullanılacağı, bundan hiç bahsetmemişsiniz.

1 Beğeni

Aynı değil. Sqlite veritabanlarında, veritabanına özel veriler de bulunur. Saf text modunda değildir. Ayrıca boyuttan ziyade işlevsellik önemli bence. Basit bir SQL sorgusu ile elde edeceğiniz verileri json içerisinden elde etmek için belki daha fazla kod yazmanız gerekecek.

Tabii ki öyle, zaten benim yapmak istediğim de JSON’nun faydalarından yaralanarak SQLite kadar işlevsel bir veritabanı istemcisi yazmak.

Pekala siz bilirsiniz. Ben bir tane paylaşayım, buraya bakabilirsiniz.

Burayı okumanızı da tavsiye ederim

Why Not Use TinyDB?

  • You need advanced features like:

    • access from multiple processes or threads,
    • creating indexes for tables,
    • an HTTP server,
    • managing relationships between tables or similar,
    • ACID guarantees.
  • You are really concerned about performance and need a high speed database.

To put it plainly: If you need advanced features or high performance, TinyDB is the wrong database for you – consider using databases like SQLite, Buzhug, CodernityDB or MongoDB.

Aslında GitHub’da küçük bir araştırma yapmıştım, ama buna rastladığımı hiç hatırlamıyorum. Bunu nasıl buldunuz bilmiyorum ama teşekkür ederim. :slight_smile:
Biraz göz gezdirdim de galiba benim tarif ettiğim kriterlere uyuyor. birazdan kodu indirip inceleyeceğim.

1 Beğeni

Rica ederim. Zamanında ben de baya araştırmıştım bunları :sweat_smile: Arada bir kullanıyorum basit projeler için, aklımdaydı yani.

1 Beğeni