Ephemeral diskteki SQLite tablosunda kalıcı rastgele sıralama

2021-07-27 2 dk

SQLite veritabanlarında önceden belirlenmiş seed değeriyle rastgele (random) veri üretmek dahili olarak mümkün değil. Bu yüzden bir seed değerine bağlı olarak sürekli aynı rastgeleliği veren bir sorgu yazmak mümkün olmayabilir. Bunu çözmek için alternatif yöntemler var. Bu yazıda da onlardan birini göstereceğim.

ephemeral: kısa bir süre var olan veya devam eden; kısa ömürlü

Heroku'nunki gibi ephemeral disklerde her deploy edişte önceki dosyalarınızı kaybedersiniz. Bu yüzden bir SQLite dosyasına sahip olmanın da pek anlamı yoktur. Ancak bu SQLite dosyasını sadece programın işleyişine dair basit runtime verileri tutmak için kullanıyorsanız ve asıl verileri sakladığınız başka veritabanınız varsa, bu yazıdaki basit ve "kirli" yöntem işinize hayli yarayacaktır.

Nasıl?

Tablomuzun adının questions olduğunu varsayalım. Bu tabloya yeni bir sütun ekleyerek random verileri burada saklayacağız. Bu sütunun adı random_order olsun.

ALTER TABLE questions ADD COLUMN random_order REAL;

Bu sütunu ekledikten sonra, sütunu rastgele sayılarla dolduracağız. Bunun için Random() fonksiyonunu kullanacağız. Bu fonksiyon her çağrıldığında farklı bir sayı döndürür. Bu sayıyı random_order sütununa yazacağız.

UPDATE questions SET random_order = Random();

Artık hepsi rastgele ama kalıcı bir sayısal değere sahip. Bu sütunu kullanarak hep aynı sonucu getirecek bir "kalıcı rastgele" sıralama yapabiliriz:

SELECT * FROM questions ORDER BY random_order

Artık ephemeral disklerde dahi kullanabileceğiniz önceden rastgele sıralanmış bir veritabanınız var.

Tarih: 2021-07-27
Kategoriler: geliştirme
Etiketler: sqlsqlite