> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
Maelezo haya yanashughulikia masuala ya utendaji katika utekelezaji wa hifadhidata ya maarifa ya TrustGraph ya Cassandra na yanapendekeza uboreshaji kwa uhifadhi na utafutaji wa data ya RDF.
## Utendaji wa Sasa
### Muundo wa Skimu
Utendaji wa sasa hutumia muundo wa jedwali moja katika `trustgraph-flow/trustgraph/direct/cassandra_kg.py`:
```sql
CREATE TABLE triples (
collection text,
s text,
p text,
o text,
PRIMARY KEY (collection, s, p, o)
);
```
**Faharasa Pili:**
`triples_s` KWA `s` (somo)
`triples_p` KWA `p` (kitenzi)
`triples_o` KWA `o` (kielele)
### Mifumo ya Umasiliano
Utaratibu wa sasa unaoendeshwa unao na mifumo 8 tofauti ya masiliano:
1.**get_all(mkusanyiko, kikomo=50)** - Pata vitriple vyote kwa mkusanyiko
```sql
SELECT s, p, o FROM triples WHERE collection = ? LIMIT 50
```
2.**get_s(collection, s, limit=10)** - Utafiti kwa mada.
```sql
SELECT p, o FROM triples WHERE collection = ? AND s = ? LIMIT 10
```
3.**get_p(collection, p, limit=10)** - Utafiti kwa kutumia vigezo.
```sql
SELECT s, o FROM triples WHERE collection = ? AND p = ? LIMIT 10
```
4.**get_o(collection, o, limit=10)** - Utafiti kwa kutumia kitu.
```sql
SELECT s, p FROM triples WHERE collection = ? AND o = ? LIMIT 10
```
5.**get_sp(collection, s, p, limit=10)** - Utafiti kwa mada + predikati
```sql
SELECT o FROM triples WHERE collection = ? AND s = ? AND p = ? LIMIT 10
```
6.**get_po(collection, p, o, limit=10)** - Utafiti kwa kutumia vigezo na kitu ⚠️
```sql
SELECT s FROM triples WHERE collection = ? AND p = ? AND o = ? LIMIT 10 ALLOW FILTERING
```
7.**get_os(collection, o, s, limit=10)** - Utafiti kwa kutumia kitu pamoja na mada ⚠️
```sql
SELECT p FROM triples WHERE collection = ? AND o = ? AND s = ? LIMIT 10 ALLOW FILTERING
```
8.**get_spo(collection, s, p, o, limit=10)** - Mechi kamili ya triple.
```sql
SELECT s as x FROM triples WHERE collection = ? AND s = ? AND p = ? AND o = ? LIMIT 10
Darasa moja la `KnowledgeGraph` linaloshughulikia shughuli zote
Uunganisho wa kikundi kupitia orodha ya kimataifa ya `_active_clusters`
Jina la jedwali lililobainishwa: `"triples"`
Spishi kwa kila mfumo wa mtumiaji
Nakala ya SimpleStrategy kwa sababu 1
**Maeneo ya Uunganisho:**
**Njia ya Kuandika:** `trustgraph-flow/trustgraph/storage/triples/cassandra/write.py`
**Njia ya Umasilisho:** `trustgraph-flow/trustgraph/query/triples/cassandra/service.py`
**Hifadhi ya Maarifa:** `trustgraph-flow/trustgraph/tables/knowledge.py`
## Matatizo ya Utendaji Yanayobainika
### Matatizo ya Ngazi ya Muundo
1.**Muundo Usiofaa wa Ufunguo Mkuu**
Sasa: `PRIMARY KEY (collection, s, p, o)`
Hupelekea uwekaji duni wa data kwa mifumo ya kawaida ya ufikiaji
Inahitaji matumizi ya gharama kubwa ya fahirisi za sekondari
2.**Matumizi Mengi ya Fahirisi za Sekondari** ⚠️
Fahirisi tatu za sekondari kwenye safu zenye maadili mengi (s, p, o)
Fahirisi za sekondari katika Cassandra ni ghali na hazipunguzi kasi vizuri
Maswali 6 na 7 yanahitaji `ALLOW FILTERING`, ambayo inaonyesha muundo duni wa data
3.**Hatari ya Sehemu Zenye Trafiki Kubwa**
Ufunguo mmoja wa sehemu `collection` unaweza kuunda sehemu zenye trafiki kubwa
Mkusanyiko mkubwa utajikuta katika nodi moja
Hakuna mkakati wa usambazaji wa mizigo
### Matatizo ya Ngazi ya Umasilisho
1.**Matumizi ya ALLOW FILTERING** ⚠️
Aina mbili za maswali (get_po, get_os) zinahitaji `ALLOW FILTERING`
Maswali haya husifia sehemu nyingi na ni ghali sana
Utendaji unapungua kwa kasi kadri ya ukubwa wa data
2.**Mifumo ya Ufikiaji Yasiyo na Ufanisi**
Hakuna uboreshaji kwa mifumo ya kawaida ya maswali ya RDF
Hakuna fahirisi za pamoja kwa mchanganyiko wa maswali unaoonekana mara kwa mara
Hakuna utambuzi wa mifumo ya utaftaji wa grafu
3.**Ukosefu wa Uboreshaji wa Umasilisho**
Hakuna kuhifadhi kwa masimulizi yaliyotayarishwa
Hakuna vidokezo au mikakati ya uboreshaji wa maswali
Hakuna utambuzi wa upangishaji zaidi ya LIMIT rahisi
## Taarifa ya Tatizo
Utekelezaji wa sasa wa hifadhi ya maarifa ya Cassandra una matatizo mawili muhimu ya utendaji:
### 1. Utendaji Usio na Ufanisi wa Maswali ya get_po
Swali la `get_po(collection, p, o)` halipunguzi kasi kwa sababu linahitaji `ALLOW FILTERING`:
```sql
SELECT s FROM triples WHERE collection = ? AND p = ? AND o = ? LIMIT 10 ALLOW FILTERING
```
**Sababu ya kuwa hii ni tatizo:**
`ALLOW FILTERING` inalazimisha Cassandra kuchanganua kila sehemu ndani ya mkusanyiko.
Utendaji hupungua kwa mstari sawa na ukubwa wa data.
Hii ni muundo wa kawaida wa swali la RDF (kutafuta vitu ambavyo vina uhusiano maalum wa tabia-jambo).
Huunda mzigo mkubwa kwenye kundi kadri data inavyoongezeka.
### 2. Mkakati Usiofaa wa Uwekaji Pamoja
Ufunguo mkuu wa sasa `PRIMARY KEY (collection, s, p, o)` hutoa faida ndogo katika uwekaji pamoja:
**Matatizo na uwekaji pamoja wa sasa:**
`collection` kama funguo ya sehemu haisambati data kwa ufanisi.
Makusanyiko mengi yana data tofauti, na kuifanya uwekaji pamoja kuwa usiofaa.
Hakuna utambuzi kwa mifumo ya kawaida ya ufikiaji katika maswali ya RDF.
Makusanyiko makubwa huunda sehemu zenye mzigo mwingi kwenye nodi moja.
Safu za uwekaji pamoja (s, p, o) haziboreshi kwa mifumo ya kawaida ya utaftaji wa grafu.
**Athari:**
Maswali hayanapata faida kutoka kwa ukaribu wa data.
Matumizi duni ya kumbukumbu (cache).
Usambazaji usio sawa wa mzigo katika nodi za kundi.
Zuio la uwezo wa kupanuka (scalability) kadri makusanyiko yanavyoongezeka.
## Suluhisho Lililopendekezwa: Mkakati wa Utofauti wa Jedwali 4
### Muhtasari
Badilisha jedwali moja `triples` na jedwali nne zilizoundwa kwa madhumuni maalum, kila moja iliyoboreshwa kwa mifumo maalum ya swali. Hii inafutilia hitaji la fahirisi za sekondari na ALLOW FILTERING huku ikiwapa utendaji bora kwa aina zote za swali. Jedwali la nne linaruhusu uondoaji wa makusanyiko kwa ufanisi licha ya funguo za sehemu zilizounganishwa.
### Muundo Mpya wa Skimu
**Jedwali la 1: Maswali Yanayozingatia Sijali (triples_s)**
```sql
CREATE TABLE triples_s (
collection text,
s text,
p text,
o text,
PRIMARY KEY ((collection, s), p, o)
);
```
**Inaboresha:** get_s, get_sp, get_os
**Ufunguo wa Sehemu:** (mkusanyiko, s) - Usambazaji bora kuliko mkusanyiko pekee
**Kukusanya:** (p, o) - Huwezesha utafutaji wa ufanisi wa vigezo/vitendo kwa ajili ya somo
**Jedwali 2: Maswali ya Vigezo-Vitendo (triples_p)**
# Verify no performance degradation in integration
```
### Mpango wa Kurudisha Nyuma
#### Mbinu ya Kurudisha Nyuma Haraka
1.**Kubadili jenereta la mazingira** - Rudi kwenye jedwali la zamani mara moja
2.**Endelea kutumia jedwali la zamani** - Usifute hadi utendaji uthibitishwe
3.**Arifa za ufuatiliaji** - Vinjari vya kiotomatiki vya kurudisha nyuma kulingana na viwango vya makosa/uwezekano wa kuchelewesha
#### Uthibitisho wa Kurudisha Nyuma
```python
def rollback_to_legacy():
# Set environment variable
os.environ['CASSANDRA_USE_LEGACY'] = 'true'
# Restart services to pick up change
restart_cassandra_services()
# Validate functionality
run_smoke_tests()
```
## Hatari na Mambo ya Kuzingatia
### Hatari za Utendaji
**Kuongezeka kwa muda wa kuandika** - Operesheni 4 za kuandika kwa kila kuingiza (33% zaidi kuliko mfumo wa meza 3)
**Uongezekaji wa matumizi ya nafasi** - Mahitaji 4 ya nafasi (33% zaidi kuliko mfumo wa meza 3)
**Hitilafu za kuandika kwa wingi** - Inahitajika udhibiti wa makosa unaofaa
**Uchaguzi wa kufuta** - Kufuta kwa mkusanyiko inahitaji mzunguko wa kusoma na kisha kufuta
### Hatari za Uendeshaji
**Uchaguzi wa uhamisho** - Uhamishaji wa data kwa data kubwa
**Changamoto za utangamano** - Kuhakikisha meza zote zinaendelea kusawazishwa
**Mapungufu ya ufuatiliaji** - Inahitajika metriki mpya kwa operesheni za meza nyingi
### Mikakati ya Kupunguza Hatari
1.**Uanzishaji wa hatua kwa hatua** - Anza na mkusanyiko mdogo
2.**Ufuatiliaji kamili** - Fuatilia metriki zote za utendaji
3.**Uthibitisho otomatiki** - Uchunguzi wa utangamano wa mara kwa mara
4.**Uwezo wa kurejesha haraka** - Uchaguzi wa meza kulingana na mazingira
## Vigezo vya Mafanikio
### Maboresho ya Utendaji
[ ] **Kuondoa ALLOW FILTERING** - Maswali ya `get_po` na `get_os` yanatumika bila kuchujwa
[ ] **Kupunguza muda wa swali** - Kuboresha kwa 50% au zaidi katika muda wa majibu ya swali
**Usambazaji bora wa mzigo** - Hakuna sehemu zenye mzigo mwingi, usambazaji sare katika kila nodi ya kundi
[ ] **Utendaji unaoweza kuongezeka** - Muda wa swali unalingana na ukubwa wa matokeo, sio data jumla
### Mahitaji ya Utendaji
[ ] **Ulinganishaji wa API** - Msimbo wote uliopo unaendelea kufanya kazi bila mabadiliko
[ ] **Utangamano wa data** - Meza zote tatu zinaendelea kusawazishwa
[ ] **Hakuna upotevu wa data** - Uhamishaji unahifadhi triples zote zilizopo
[ ] **Ulinganishaji wa nyuma** - Uwezo wa kurejea kwenye mpango wa zamani
### Mahitaji ya Uendeshaji
[ ] **Uhamisho salama** - Uanzishaji wa kijani na bluu na uwezo wa kurejesha
[ ] **Mazingira ya ufuatiliaji** - Metri kamili kwa operesheni za meza nyingi
[ ] **Mazingira ya majaribio** - Mfumo wote wa maswali umejaribiwa na viwango vya utendaji
[ ] **Nyaraka** - Mbinu zilizosasishwa za uanzishaji na uendeshaji
## Ratiba
### Awamu ya 1: Utendaji
[ ] Andika upya `cassandra_kg.py` na mpango wa meza nyingi
[ ] Leta operesheni za kuandika kwa wingi
[ ] Ongeza utendaji wa tamko lililoboreshwa
[ ] Sasisha vipimo vya kitengo
### Awamu ya 2: Majaribio ya Uunganisho
[ ] Sasisha vipimo vya uunganisho
[ ] Vipimo vya utendaji
[ ] Majaribio ya mzigo na kiasi cha data ya kweli
[ ] Skripti za uthibitisho wa utangamano wa data
### Awamu ya 3: Upangaji wa Uhamishaji
[ ] Skripti za uanzishaji wa kijani na bluu
[ ] Zana za uhamishaji wa data
[ ] Sasisho za dashibodi ya ufuatiliaji
[ ] Taratibu za kurejesha
### Awamu ya 4: Uanzishaji wa Uzalishaji
[ ] Uanzishaji wa hatua kwa hatua katika uzalishaji
[ ] Ufuatiliaji na uthibitisho wa utendaji
[ ] Usafishaji wa meza za zamani
[ ] Sasisho za nyaraka
## Hitimisho
Mbinu hii ya kupunguza data katika meza nyingi inashughulikia moja kwa moja matatizo mawili muhimu ya utendaji:
1.**Inaondoa ALLOW FILTERING iliyogharimu** kwa kutoa miundo bora ya meza kwa kila mfumo wa swali
2.**Inaboresha ufanisi wa uwekaji** kupitia ufunguo wa pamoja wa sehemu ambazo husambaza mzigo vizuri
Mbinu hii inatumia nguvu za Cassandra huku ikiendelea kudumisha ulinganishaji kamili wa API, kuhakikisha kuwa msimbo uliopo unafaidika kiotomatiki kutoka kwa maboresho ya utendaji.