"SQLite: MQL5'te SQL veritabanlarıyla yerel olarak çalışma" makalesi için tartışma - sayfa 9

 

Maxim Kuznetsov #:

SQLite bir iş parçacığı ya da bir yazar ve birçok okuyucu için tasarlanmıştır. Birçok yazar bununla ilgili değil, "hafif" olmayan diğer temellerle ilgili.

Bu MQL ile ilgili değil - bu sadece gerçekten ve her yerde olduğu gibi.

PostgreSQL'in çalıştığını görmek istememin bir başka nedeni de bu.

 
JRandomTrader #:

PostgreSQL'in çalıştığını görmek istememin bir başka nedeni de bu.

Öyleyse yapın, sorun nedir? DLL'ye izin verin ve kullanın.

PostgreSQL kullanıcısı değilim, ancak MySQL, MonetDB, SQL Relay ve mt5'ten ODBC kullandım.

Bir ihtiyaç olduğunda, bunu kendiniz yapmak, doğadan iyilik beklemekten daha kolay ve hızlıdır

 
Maxim Kuznetsov #:

sorgu hızı düşecek ve bellek gereksinimleri artacaktır....

ama her şey yolunda :-)

SQLite bir iş parçacığı ya da bir yazar ve birçok okuyucu için tasarlanmıştır. Birçok yazar bu konuda, "hafif" olmayan diğer üsler hakkında değildir.

Bu MQL ile ilgili değil - bu sadece gerçekten ve her yerde olduğu gibi.

Belki de SQLite'ı nasıl hazırlayacağınızı bilmiyorsunuz, içinde hiçbir darboğaz yok, yani gelen tüm akışları yok eden tek bir TCP sunucusu gibi, bu sunucu diğer tüm veritabanlarında ...

SQLite bir hediyedir, eğer uygun şekilde hazırlanırsa, yazma isteklerinin hızı Redis'ten daha yüksek olacaktır ve kendisini okumakla ilgili olarak, temel iş parçacıklarından okuduğunuzda birbirlerini engellemez ve her şey sistem kaynaklarınızda dinlenerek olabildiğince hızlı gerçekleşir, ayrıca veritabanını RAM'de dağıtma fırsatı verilir, oluştururken nasıl olduğu önemli değildir ve RAM'de bir disk oluşturmak için özel bir yazılım aracılığıyla ve veritabanını yerleştirmek ve sembolik bir bağlantı oluşturmak için, örneğin danışmanlar için kullanıyorsanız, mümkün olan en yüksek performansı sağlayacaktır.

Ve belki de SQLite'da önbellek paylaşımının neden gerekli olduğunu anlamıyorsunuz..., girdi çıktısı için bellek kaynaklarından tasarruf etmek gerekir, böylece Uzman Danışmanlar ve komut dosyaları sonunda daha az bellek tüketir ve yalnızca işleri için ayrı bir iş parçacığı tahsis edildiğinden, göstergeler için ayrı bir iş parçacığı tahsis edilmez.

Paylaşılan önbellek modu kullanıldığında, taban ile bağlantı ayrı iş parçacıkları için değil, tüm işlem için açılır, bu da kaynaklardan tasarruf sağlar, ancak sonuç olarak yukarıda açıkladığım benzer hatalara yol açar ve paylaşılan önbellek tabanın çalışmasını yavaşlatır.

MQL geliştiricilerinin kararı bir yandan benim için anlaşılabilir, ancak diğer yandan çok fazla değil, çünkü platformla ilgili çok fazla deneyime sahibim ve herhangi birinin aynı anda 200'den fazla iş parçacığı çalıştırdığı durumlarla karşılaşmadım, terminalde 1'de 100 grafik sınırı, böylece her birine 1 Uzman Danışman ve 1 komut dosyası ekleyebilirsiniz, ancak hizmetleri de çalıştırabilirsiniz hizmetlerin sayısında bir sınır olmadığını düşünüyorum, ancak en azından her durumda uygun ve kaynak yoğun değil ve bu iş parçacıkları veritabanına kendi bağlantılarını açtıysa, o zaman bellek okyanusunda nispeten bir düşüş.

Terminalin bu şekilde kullanılması en azından sakıncalıdır ve en fazla hiçbir anlam ifade etmez, çünkü yetkin bir geliştirici tek bir iş parçacığı olarak çoklu para birimi Uzman Danışmanı yapacak ve böyle bir saçmalıkla uğraşmayacaktır.

Sevgili geliştiriciler, lütfen ortak önbelleği kaldırın veya gözden kaçırdığım bir şey varsa beni dürtün.

"SQLite Shared-Cache" hakkındaki özü resmi belgelerden aldım:

"Bu, sistemin ihtiyaç duyduğu bellek ve IO miktarını önemli ölçüde azaltabilir."

İşte bağlantı, okuyun.

 

MetaEditor'de , veritabanı ile çalışmak için bu düğmeler ( Çalıştır hariç) henüz çalışmıyor mu?


Her zaman kilitlidirler.

 

Bu sorgu hiçbir şey döndürmez:

PRAGMA foreign_keys;

Bir FOREIGN KEY ekleme girişimi başarısız olur:

    string query = "PRAGMA foreign_keys=ON;";
    if(!DatabaseExecute(m_db_handle, query)) {
      Print(__FUNCTION__, " > Query failed with code: ", GetLastError());
    }

Belgelerde şu bilgiler bulunmaktadır: https: //www.sqlite.org/foreignkeys.html#fk_enable

Tip: If the command "PRAGMA foreign_keys" returns no data instead of a single row containing "0" or "1", then the version of SQLite you are using does not support foreign keys (either because it is older than 3.6.19 or

çünküSQLITE_OMIT_FOREIGN_KEY veya SQLITE_OMIT_TRIGGER tanımlı olarak derlenmiştir ).

SQLITE_OMIT_TRIGGER

Bu seçeneğin tanımlanması TRIGGER nesneleri için desteği ortadan kaldırır. Bu durumdaCREATE TRIGGER veya DROP TRIGGER komutları kullanılamaz ve bu komutlardan birini çalıştırmaya çalışmak bir ayrıştırma hatasıyla sonuçlanır. Bu seçenek aynı zamandayabancı anahtar kısıtlamalarının uygulanmasını da devre dışı bırakır, çünkü tetikleyicileri uygulayan ve bu seçenek tarafından atlanan kod,yabancı anahtar eylemlerini uygulamak için de kullanılır.

SQLITE_OMIT_FOREIGN_KEY

Bu seçenek tanımlanırsa,yabancı anahtar kısıtlama sözdizimi tanınmaz.


Sürümde yanlış bir şey yok:

//---

FOREIGN KEY nasıl etkinleştirilir?

 
Anatoli Kazharski #:

Bu sorgu hiçbir şey döndürmez:

Bir FOREIGN KEY ekleme girişimi başarısız olur:

Belgelerde şu bilgiler bulunmaktadır: https: //www.sqlite.org/foreignkeys.html#fk_enable


Sürümde yanlış bir şey yok:

//---

FOREIGN KEY nasıl etkinleştirilir?

FOREIGN KEY varsayılan olarak etkindir, SQLITE_OMIT_FOREIGN_KEY veya SQLITE_OMIT_TRIGGER kullanmayız.

PRAGMA foreign_keys=ON; kullanılmamalıdır.


.

Performansı kontrol etmek için https://www.sqlite.org/foreignkeys.html örneğini kullanabilirsiniz.

CREATE TABLE artist(
  artistid    INTEGER PRIMARY KEY, 
  artistname  TEXT
);

CREATE TABLE track(
  trackid     INTEGER, 
  trackname   TEXT, 
  trackartist INTEGER,
  FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);

Editörde çalışırken, her şey hatasız bir şekilde düzgün çalışıyor.

 
Renat Fatkhullin #:

FOREIGN KEY varsayılan olarak etkindir, SQLITE_OMIT_FOREIGN_KEY veya SQLITE_OMIT_TRIGGER kullanmayız.

PRAGMA foreign_keys=ON; kullanılmamalıdır.


Performansı kontrol etmek için https://www.sqlite.org/foreignkeys.html örneğini kullanabilirsiniz.

Editörde çalışırken, her şey hatasız bir şekilde düzgün çalışıyor.

Cevap için teşekkürler!

Bazı nedenlerden dolayı beklediğim sonucu alamıyorum:

//---

Hata nerede?

Benim de uğraşmak istediğim şey bu:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi üzerine forum

"SQLite: MQL5'te SQL veritabanları ile yerel çalışma" makalesinin tartışılması.

Anatoli Kazharski, 2022.10.05 01:54 AM

MetaEditor'de veritabanı ile çalışmak için bu düğmeler ( Execute hariç) henüz çalışmıyor mu?


Her zaman engellenirler.

 

Lütfen birinden yukarıdaki örneği yeniden üretmesini isteyin.

İz tablosundaki son satır (vurgulanmış) eklenmemelidir.

 

Aynı şemayı SQLiteStudio 'da test ettim ve her şey doğru çalışıyor.

Üst tabloda mevcut olmayan bir kimliğe sahip bir satır eklemeye çalışırken uyarı böyle görünmelidir:


 
Teşekkürler, kontrol edeceğiz.