Native CLI i18n: The TrustGraph CLI has built-in translation support that dynamically loads language strings. You can test and use different languages by simply passing the --lang flag (e.g., --lang es for Spanish, --lang ru for Russian) or by configuring your environment's LANG variable. Automated Docs Translations: This PR introduces autonomously translated Markdown documentation into several target languages, including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew, Arabic, Simplified Chinese, and Russian.
23 KiB
| layout | title | parent |
|---|---|---|
| default | Vipimo vya Kawaida vya Takwimu Zilizopangwa (Sehemu ya 2) | Swahili (Beta) |
Vipimo vya Kawaida vya Takwimu Zilizopangwa (Sehemu ya 2)
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.
Muhtasari
Maelezo haya yanaeleza masuala na pengo ambazo zimetambuliwa wakati wa utekelezaji wa awali wa ujumuishaji wa takwimu zilizopangwa wa TrustGraph, kama ilivyoelezwa katika structured-data.md.
Matatizo
1. Utangamano Usio sawa wa Majina: "Kitu" dhidi ya "Rata"
Utaratibu wa sasa hutumia neno "kitembele" katika kila sehemu (k.m., ExtractedObject, utoaji wa kitu, uwekaji wa kitu). Neno hili ni la jumla sana na husababisha mchanganyiko:
"Kitembele" ni neno linalotumika kwa matumizi mengi katika programu (vitu vya Python, vitu vya JSON, n.k.) Data inayoshughulikiwa ni ya aina ya meza - ratiba katika meza zilizo na muundo uliotofautishwa "Rata" inaelezea vizuri zaidi mfumo wa data na inaendana na neno la hifadhi ya data
Utangamano huu huonekana katika majina ya moduli, majina ya madarasa, aina za ujumbe, na nyaraka.
2. Mipaka ya Ufuatiliaji wa Rata
Utaratibu wa sasa wa hifadhi ya rata una mipaka muhimu ya ufuatiliaji:
Utangamano wa Lugha Asilia: Ufuatiliaji unashindana na tofauti za ulimwengu halisi. Kwa mfano:
Ni vigumu kupata hifadhi ya barabara inayokuwa na "CHESTNUT ST" wakati unatafuta "Chestnut Street"
Marekebisho, tofauti za herufi, na tofauti za umbizo hufutilia ufuatiliaji wa usawizi
Watumiaji wanatarajia uelewa wa maana, lakini hifadhi hutoa mechi ya moja kwa moja
Masuala ya Mabadiliko ya Muundo: Mabadiliko ya muundo husababisha matatizo: Data iliyopo inaweza kutosana na muundo uliosasishwa Mabadiliko ya muundo wa meza yanaweza kuvunja ufuatiliaji na uadilifu wa data Hakuna njia wazi ya kusonga muundo kwa mabadiliko ya muundo
3. Uwekaji wa Rata Unahitajika
Kuhusiana na tatizo la 2, mfumo unahitaji uwekaji wa vector kwa data ya rata ili kuwezesha:
Ufuatiliaji wa maana katika data iliyopangwa (kupata "Chestnut Street" wakati data ina "CHESTNUT ST") Mechi ya ufanano kwa ufuatiliaji wa uwazi Ufuatiliaji wa mchanganyiko unaounganisha vichujio vilivyopangwa na ufanano wa maana Usaidizi bora wa lugha asilia ya ufuatiliaji
Huduma ya uwekaji ilikuwa imeelezwa lakini haijatekelezwa.
4. Uongezaji wa Data ya Rata hajakamilika
Mnyororo wa data ya takwimu zilizopangwa haujafanya kazi kikamilifu:
Mawazo ya uchunguzi yanapatikana ili kuainisha muundo wa pembejeo (CSV, JSON, n.k.) Huduma ya uongezaji ambayo hutumia mawazo haya haijunganishwa kwenye mfumo Hakuna njia kamili ya kupakia data iliyopangwa tayari kwenye hifadhi ya rata
Lengo
Unyumbufu wa Muundo: Kuwezesha mabadiliko ya muundo bila kuvunja data iliyopo au kuhitaji uhamisho Utangamano wa Majina: Kuweka "rata" kama neno la kawaida katika kila sehemu ya programu Ufuatiliaji wa Maana: Kusaidia mechi ya maana/uwazi kupitia uwekaji wa rata Mnyororo Kamili wa Uongezaji: Kutoa njia kamili ya kupakia data iliyopangwa
Muundo wa Kiufundi
Muundo Uliounganishwa wa Hifadhi ya Rata
Utaratibu wa awali uliunda meza tofauti ya Cassandra kwa kila muundo. Hii ilisababisha matatizo wakati muundo ulibadilika, kwa sababu mabadiliko ya muundo wa meza yalihitaji uhamisho.
Muundo mpya hutumia meza moja iliyounganishwa kwa data yote ya rata:
CREATE TABLE rows (
collection text,
schema_name text,
index_name text,
index_value frozen<list<text>>,
data map<text, text>,
source text,
PRIMARY KEY ((collection, schema_name, index_name), index_value)
)
Ufafanuzi wa Safu
| Safu | Aina | Maelezo |
|---|---|---|
collection |
text |
Kitambulisho cha ukusanyaji/kuingiza data (kutoka kwa metadata) |
schema_name |
text |
Jina la mpango ambao safu hii inafuata |
index_name |
text |
Majina ya sehemu zilizopangiliwa, yameunganishwa kwa mkato kwa sehemu mbalimbali |
index_value |
frozen<list<text>> |
Maadili ya kifunguo kama orodha |
data |
map<text, text> |
Data ya safu kama jozi za ufunguo-thamani |
source |
text |
URI ya hiari inayounganisha na maelezo ya asili katika mfumo wa maarifa. Mnyororo tupu au NULL inaonyesha kuwa hakuna chanzo. |
Usimamizi wa Faharasa
Kila safu huhifadhiwa mara nyingi - mara moja kwa kila sehemu iliyopangiliwa iliyobainishwa katika mpango. Sehemu kuu za ufunguo zinatibiwa kama faharasa bila alama maalum, ambayo hutoa uwezekano wa kubadilika katika siku zijazo.
Mfano wa faharasa ya sehemu moja:
Mpango unafafanua email kuwa iliyopangiliwa
index_name = "email"
index_value = ['foo@bar.com']
Mfano wa faharasa mchanganyiko:
Mpango unafafanua faharasa mchanganyiko kwenye region na status
index_name = "region,status" (majina ya sehemu yamepangwa na yameunganishwa kwa mkato)
index_value = ['US', 'active'] (maadili katika utaratibu sawa na majina ya sehemu)
Mfano wa ufunguo mkuu:
Mpango unafafanua customer_id kuwa ufunguo mkuu
index_name = "customer_id"
index_value = ['CUST001']
Mfano wa Maswali
Maswali yote yanafuata muundo sawa bila kujali faharasa gani inayotumika:
SELECT * FROM rows
WHERE collection = 'import_2024'
AND schema_name = 'customers'
AND index_name = 'email'
AND index_value = ['foo@bar.com']
Mizunguko ya Ubunifu
Faida:
Mabadiliko ya schema hayahitaji mabadiliko ya muundo wa jedwali
Data ya mstari ni ya siri kwa Cassandra - ongezeko/ondoano la nafasi ni wazi
Mfumo thabiti wa swali kwa njia zote za upatikanaji
Hakuna fahirisi za sekondari za Cassandra (ambazo zinaweza kuwa polepole kwa kiwango kikubwa)
Aina za asili za Cassandra katika kila sehemu (map, frozen<list>)
Utofauti: Kuongezeka kwa uandishi: kila kuingizwa kwa mstari = ongezeko la N (moja kwa kila nafasi iliyofichwa) Gharama ya kuhifadhi kutokana na data ya mstari iliyorudiwa Habari ya aina huhifadhiwa katika usanidi wa schema, ubadilishaji katika safu ya programu
Mfumo wa Ulinganisho
Ubunifu huu unapokea uboreshaji fulani:
-
Hakuna sasisho za mstari: Mfumo huu ni wa kuongeza tu. Hii inazuia wasiwasi wa ulinganisho kuhusu kusasisha nakala nyingi za mstari mmoja.
-
Uvumilivu wa mabadiliko ya schema: Wakati schemas hubadilika (k.m., fahirisi zinaongezwa/kuondolewa), mistari iliyopo inaendelea kuwa na uwekaji wa fahirisi wake wa awali. Mistari ya zamani haitaweza kupatikana kupitia fahirisi mpya. Watumiaji wanaweza kufuta na kuunda tena schema ili kuhakikisha ulinganisho ikiwa ni lazima.
Ufuatiliaji na Ufutilishaji wa Sehemu
Tatizo
Kwa ufunguo wa sehemu (collection, schema_name, index_name), ufutaji bora unahitaji kujua ufunguo wote wa sehemu ili kufutwa. Ufutilishaji kwa collection au collection + schema_name pekee unahitaji kujua maadili yote ya index_name ambayo yana data.
Jedwali la Ufuatiliaji wa Sehemu
Jedwali la ziada la utafutaji linafuatilia sehemu zipi zilizo.
CREATE TABLE row_partitions (
collection text,
schema_name text,
index_name text,
PRIMARY KEY ((collection), schema_name, index_name)
)
Hii inaruhusu ugunduzi bora wa sehemu za kufutwa.
Tabia ya Kifaa cha Kuandika Mistari
Kifaa cha kuandika mistari kinahifadhi kumbukumbu ya jozi zilizosajiliwa za (collection, schema_name). Wakati wa kuchakata mstari:
- Angalia ikiwa
(collection, schema_name)iko kwenye kumbukumbu - Ikiwa haijahifadhiwa (mstari wa kwanza kwa jozi hii):
Tafuta usanidi wa schema ili kupata majina yote ya index
Ingiza vipengele katika
row_partitionskwa kila(collection, schema_name, index_name)Ongeza jozi kwenye kumbukumbu - Endelea na kuandika data ya mstari
Kifaa cha kuandika mistari pia kinachunguza mabadiliko ya usanidi wa schema. Wakati schema inabadilika, vipengele muhimu vya kumbukumbu vinafutwa ili mstari unaofuata usisababishwe tena usajili na majina mapya ya index.
Mbinu hii inahakikisha:
Uandikaji wa jedwali la utafutaji hutokea mara moja kwa kila jozi ya (collection, schema_name), sio kwa kila mstari
Jedwali la utafutaji linaonyesha indexes ambazo zilikuwa zinafanya kazi wakati data ilipoandikwa
Mabadiliko ya schema wakati wa uingizaji yanaonekana kwa usahihi
Operesheni za Ufute
Futa mkusanyiko:
-- 1. Discover all partitions
SELECT schema_name, index_name FROM row_partitions WHERE collection = 'X';
-- 2. Delete each partition from rows table
DELETE FROM rows WHERE collection = 'X' AND schema_name = '...' AND index_name = '...';
-- (repeat for each discovered partition)
-- 3. Clean up the lookup table
DELETE FROM row_partitions WHERE collection = 'X';
Futa mkusanyiko na schema:
-- 1. Discover partitions for this schema
SELECT index_name FROM row_partitions WHERE collection = 'X' AND schema_name = 'Y';
-- 2. Delete each partition from rows table
DELETE FROM rows WHERE collection = 'X' AND schema_name = 'Y' AND index_name = '...';
-- (repeat for each discovered partition)
-- 3. Clean up the lookup table entries
DELETE FROM row_partitions WHERE collection = 'X' AND schema_name = 'Y';
Uelekezaji wa Data
Uelekezaji wa data unawezesha utambuzi wa maana/ufanano kwenye maadili yaliyohifadhiwa, na kutatua tatizo la kutofautiana kwa lugha (k.m., kutafuta "CHESTNUT ST" wakati unatafuta "Chestnut Street").
Muhtasari wa Ubunifu
Kila jambo lililohifadhiwa limeelekezwa na kuhifadhiwa katika hifadhi ya vekta (Qdrant). Wakati wa utafutaji, swali linaelekezwa, vekta sawa zinafanywa, na metadata inayohusiana hutumiwa kutafuta mistari halisi katika Cassandra.
Muundo wa Mkusanyiko wa Qdrant
Mkusanyiko mmoja wa Qdrant kwa kila jozi ya (user, collection, schema_name, dimension):
Jina la mkusanyiko: rows_{user}_{collection}_{schema_name}_{dimension}
Majina husafishwa (herufi ambazo sio alfabeti hubadilishwa na _, yamebadilishwa kuwa herufi ndogo, prefixes za namba hupata prefix ya r_)
Sababu: Inaruhusu kufutwa kwa jozi ya (user, collection, schema_name) kwa kufuta makusanyiko yanayolingana ya Qdrant; kiambishi cha kipimo huruhusu modeli tofauti za uelekezaji kuwepo.
Kile Kinachoelekezwa
Uwazi wa maandishi wa maadili ya index:
| Aina ya Index | Mfano wa index_value |
Maandishi ya Kuelekeza |
|---|---|---|
| Uwanja mmoja | ['foo@bar.com'] |
"foo@bar.com" |
| Mchanganyiko | ['US', 'active'] |
"US active" (imeunganishwa na nafasi) |
Muundo wa Pointi
Kila pointi ya Qdrant ina:
{
"id": "<uuid>",
"vector": [0.1, 0.2, ...],
"payload": {
"index_name": "street_name",
"index_value": ["CHESTNUT ST"],
"text": "CHESTNUT ST"
}
}
| Uwanja wa Data | Maelezo |
|---|---|
index_name |
Uwanja(s) ulio(o) ambao embedding hii inawakilisha |
index_value |
Orodha ya awali ya maadili (kwa utafutaji wa Cassandra) |
text |
Nakala iliyoingizwa (kwa ajili ya utatuzi/kuonyesha) |
Kumbuka: user, collection, na schema_name zinaonyeshwa moja kwa moja kutoka kwa jina la mkusanyiko wa Qdrant.
Mtiririko wa Utafiti
- Mtumiaji anatafuta "Chestnut Street" ndani ya mtumiaji U, mkusanyiko X, schema Y
- Ingiza nakala ya utafutaji
- Tambua jina(s) la mkusanyiko wa Qdrant linalolingana na kielelezo
rows_U_X_Y_ - Tafuta mkusanyiko(s) unaolingana wa Qdrant kwa vectori za karibu
- Pata pointi zinazolingana zilizo na data zinazozingatia
index_namenaindex_value - Tafuta Cassandra:
SELECT * FROM rows WHERE collection = 'X' AND schema_name = 'Y' AND index_name = '<from payload>' AND index_value = <from payload> - Kurudisha mistari iliyolingana.
Hiari: Kuchuja kwa Jina la Index
Maswali yanaweza hiari kuchuja kwa index_name katika Qdrant ili kutafuta tu sehemu maalum:
"Tafuta sehemu yoyote inayolingana na 'Chestnut'" → tafuta vectori zote katika mkusanyiko.
"Tafuta 'street_name' inayolingana na 'Chestnut'" → chuja ambapo payload.index_name = 'street_name'.
Muundo
Uwekaji wa mistari unafuata muundo wa hatua mbili unaotumika na GraphRAG (uwekaji wa grafu, uwekaji wa hati):
Hatua ya 1: Hesabu ya uwekaji (trustgraph-flow/trustgraph/embeddings/row_embeddings/) - Hutumia ExtractedObject, huhesabu uwekaji kupitia huduma ya uwekaji, hutoka RowEmbeddings.
Hatua ya 2: Uhifadhi wa uwekaji (trustgraph-flow/trustgraph/storage/row_embeddings/qdrant/) - Hutumia RowEmbeddings, huandika vectori kwenye Qdrant.
Mwandishi wa mistari wa Cassandra ni mtumiaji wa ziada unaoendeshwa kwa njia fiche:
Mwandishi wa mistari wa Cassandra (trustgraph-flow/trustgraph/storage/rows/cassandra) - Hutumia ExtractedObject, huandika mistari kwenye Cassandra.
Huduma zote tatu hutumia kutoka kwa mtiririko mmoja, na hivyo kuzifanya kuwa huru. Hii inaruhusu: Uongezaji wa kasi wa kujitegemea wa uandishi wa Cassandra dhidi ya utengenezaji wa uwekaji dhidi ya uhifadhi wa vectori. Huduma za uwekaji zinaweza kuzimwa ikiwa hazihitajiki. Hitilafu katika huduma moja hazisababishi athari kwa huduma zingine. Muundo thabiti na mabomba ya GraphRAG.
Njia ya Kuandika
Hatua ya 1 (mchakato wa uwekaji wa mistari): Unapopokea ExtractedObject:
- Tafuta schema ili kupata sehemu zilizoidishwa.
- Kwa kila sehemu iliyoidishwa: Jenga uwakilishi wa maandishi wa thamani ya index. Hesabu uwekaji kupitia huduma ya uwekaji.
- Toa ujumbe wa
RowEmbeddingsunao na vectori zote zilizohitajiwa.
Hatua ya 2 (uandishi wa uwekaji wa mistari-qdrant): Unapopokea RowEmbeddings:
- Kwa kila uwekaji katika ujumbe:
Tambua mkusanyiko wa Qdrant kutoka
(user, collection, schema_name, dimension). Unda mkusanyiko ikiwa unahitajika (utengenezaji wa polepole katika uandishi wa kwanza). Ongeza pointi na vector na mzigo.
Aina za Ujumbe
@dataclass
class RowIndexEmbedding:
index_name: str # The indexed field name(s)
index_value: list[str] # The field value(s)
text: str # Text that was embedded
vectors: list[list[float]] # Computed embedding vectors
@dataclass
class RowEmbeddings:
metadata: Metadata
schema_name: str
embeddings: list[RowIndexEmbedding]
Jumuisho la Ufuteaji
Makusanyo ya Qdrant hugunduliwa kwa kutumia utangamano wa jina la makusanyo:
Futa (user, collection):
- Orodha makusanyo yote ya Qdrant yanayolingana na utangamano
rows_{user}_{collection}_ - Futa kila makusanyo yanayolingana
- Futa sehemu za mistari ya Cassandra (kama ilivyoelezwa hapo juu)
- Safisha maingizo ya
row_partitions
Futa (user, collection, schema_name):
- Orodha makusanyo yote ya Qdrant yanayolingana na utangamano
rows_{user}_{collection}_{schema_name}_ - Futa kila makusanyo yanayolingana (inashughulikia vipimo vingi)
- Futa sehemu za mistari ya Cassandra
- Safisha
row_partitions
Maeneo ya Moduli
| Hatua | Moduli | Kituo cha Kuanzia |
|---|---|---|
| Hatua 1 | trustgraph-flow/trustgraph/embeddings/row_embeddings/ |
row-embeddings |
| Hatua 2 | trustgraph-flow/trustgraph/storage/row_embeddings/qdrant/ |
row-embeddings-write-qdrant |
API ya Uchunguzi wa Uelekezo
Uchunguzi wa uelekezo ni API tofauti kutoka kwa huduma ya uchunguzi wa mstari wa GraphQL:
| API | Madhumuni | Nyuma |
|---|---|---|
| Uchunguzi wa Mstari (GraphQL) | Utangamano kamili kwenye sehemu zilizofichwa | Cassandra |
| Uchunguzi wa Uelekezo | Utangamano wa dhana/maneno | Qdrant |
Tofauti hii huweka masuala tofauti: Huduma ya GraphQL inazingatia maswali kamili na yaliyo na muundo API ya uelekezo inashughulikia ufanano wa dhana Mchakato wa mtumiaji: utafutaji wa dhana kupitia uelekezo ili kupata wagombea, kisha uchunguzi kamili ili kupata data kamili ya mstari
Mfumo wa Ombi/Jibu
@dataclass
class RowEmbeddingsRequest:
vectors: list[list[float]] # Query vectors (pre-computed embeddings)
user: str = ""
collection: str = ""
schema_name: str = ""
index_name: str = "" # Optional: filter to specific index
limit: int = 10 # Max results per vector
@dataclass
class RowIndexMatch:
index_name: str = "" # The matched index field(s)
index_value: list[str] = [] # The matched value(s)
text: str = "" # Original text that was embedded
score: float = 0.0 # Similarity score
@dataclass
class RowEmbeddingsResponse:
error: Error | None = None
matches: list[RowIndexMatch] = []
Mchakato wa Uchunguzi
Moduli: trustgraph-flow/trustgraph/query/row_embeddings/qdrant
Kuanzia: row-embeddings-query-qdrant
Mchakato:
- Hupokea
RowEmbeddingsRequestpamoja na vektor za swali - Hutafuta mkusanyiko unaofaa wa Qdrant kwa kutumia utangamano wa nenosiri
- Hutafuta vektor za karibu pamoja na kipengele cha
index_namecha hiari - Hurudisha
RowEmbeddingsResponsepamoja na maelezo ya fahirisi yanayolingana
Uunganisho wa Milango ya API
Lango huonyesha maswali ya uelekezo wa mstari kupitia muundo wa kawaida wa ombi/jibu:
| Sehemu | Mahali |
|---|---|
| Msambazaji | trustgraph-flow/trustgraph/gateway/dispatch/row_embeddings_query.py |
| Usajili | Ongeza "row-embeddings" kwenye request_response_dispatchers katika manager.py |
Jina la kiungo cha mtiririko: row-embeddings
Ufafanuzi wa kiungo katika mpango wa mtiririko:
{
"interfaces": {
"row-embeddings": {
"request": "non-persistent://tg/request/row-embeddings:{id}",
"response": "non-persistent://tg/response/row-embeddings:{id}"
}
}
}
Usaidizi wa SDK ya Python
SDK hutoa njia za kuuliza kuhusu uwekaji wa data katika mistari:
# Flow-scoped query (preferred)
api = Api(url)
flow = api.flow().id("default")
# Query with text (SDK computes embeddings)
matches = flow.row_embeddings_query(
text="Chestnut Street",
collection="my_collection",
schema_name="addresses",
index_name="street_name", # Optional filter
limit=10
)
# Query with pre-computed vectors
matches = flow.row_embeddings_query(
vectors=[[0.1, 0.2, ...]],
collection="my_collection",
schema_name="addresses"
)
# Each match contains:
for match in matches:
print(match.index_name) # e.g., "street_name"
print(match.index_value) # e.g., ["CHESTNUT ST"]
print(match.text) # e.g., "CHESTNUT ST"
print(match.score) # e.g., 0.95
Utumizi wa Kamba ya Amri
Amri: tg-invoke-row-embeddings
# Query by text (computes embedding automatically)
tg-invoke-row-embeddings \
--text "Chestnut Street" \
--collection my_collection \
--schema addresses \
--index street_name \
--limit 10
# Query by vector file
tg-invoke-row-embeddings \
--vectors vectors.json \
--collection my_collection \
--schema addresses
# Output formats
tg-invoke-row-embeddings --text "..." --format json
tg-invoke-row-embeddings --text "..." --format table
Mfano wa Matumizi ya Kawaida
Uchunguzi wa pembejeo za mstari kwa kawaida hutumika kama sehemu ya mtiririko wa utafutaji wa "vunjifu" hadi "sahihi":
# Step 1: Fuzzy search via embeddings
matches = flow.row_embeddings_query(
text="chestnut street",
collection="geo",
schema_name="streets"
)
# Step 2: Exact lookup via GraphQL for full row data
for match in matches:
query = f'''
query {{
streets(where: {{ {match.index_name}: {{ eq: "{match.index_value[0]}" }} }}) {{
street_name
city
zip_code
}}
}}
'''
rows = flow.rows_query(query, collection="geo")
Mfumo huu wa hatua mbili huruhusu: Kugundua "CHESTNUT ST" wakati mtumiaji anatafuta "Chestnut Street" Kuchukua data kamili ya mstari pamoja na sehemu zote Kuchanganya utambulisho wa maana na ufikiaji wa data iliyopangwa
Uingizaji wa Data ya Mstari
Itarefushwa hadi hatua ya baadaye. Itaundwa pamoja na mabadiliko mengine ya uingizaji.
Athari ya Utendaji
Uchambuzi wa Hali ya Sasa
Utendaji uliopo una vipengele viwili mikuu:
| Kipengele | Mahali | Mistari | Maelezo |
|---|---|---|---|
| Huduma ya Utafutaji | trustgraph-flow/trustgraph/query/objects/cassandra/service.py |
~740 | Moja kwa moja: Uundaji wa schema ya GraphQL, uchanganuzi wa vichujio, maswali ya Cassandra, usimamizi wa ombi |
| Mwandishi | trustgraph-flow/trustgraph/storage/objects/cassandra/write.py |
~540 | Uundaji wa jedwali kwa kila schema, fahirisi za sekondari, kuingiza/kufuta |
Mfumo wa Sasa wa Utafutaji:
SELECT * FROM {keyspace}.o_{schema_name}
WHERE collection = 'X' AND email = 'foo@bar.com'
ALLOW FILTERING
Muundo Mpya wa Ulizaji:
SELECT * FROM {keyspace}.rows
WHERE collection = 'X' AND schema_name = 'customers'
AND index_name = 'email' AND index_value = ['foo@bar.com']
Mabadiliko Muhimu
-
Uboreshaji wa maana ya maswali: Mfumo mpya unaunga mkono tu mechi kamili kwenye
index_value. Vifiltrishi vya GraphQL ya sasa (gt,lt,contains, n.k.) ama: Yanakuwa uchujaji wa ziada kwenye data iliyorudishwa (ikiwa bado inahitajika) Yanondolewa ili kutumia API ya embeddings kwa mechi zisizo sahihi -
Msimbo wa GraphQL umeunganishwa sana: Mfumo wa sasa wa
service.pyunajumuisha utengenezaji wa aina za Strawberry, uchanganuzi wa vifiltrishi, na maswali maalum ya Cassandra. Kuongeza mfumo mwingine wa kuhifadhi data ingeongeza mistari ~400 ya msimbo wa GraphQL.
Pendekezo la Urekebishaji
Urekebishaji una sehemu mbili:
1. Tenganisha Msimbo wa GraphQL
Toa vipengele vya GraphQL ambavyo vinaweza kutumika tena katika moduli iliyoshirikiwa:
trustgraph-flow/trustgraph/query/graphql/
├── __init__.py
├── types.py # Filter types (IntFilter, StringFilter, FloatFilter)
├── schema.py # Dynamic schema generation from RowSchema
└── filters.py # Filter parsing utilities
Hii inawezesha: Matumizi upya katika mifumo tofauti ya kuhifadhi data. Tofauti wazi zaidi ya majukumu. Uchunguzi rahisi zaidi wa mantiki ya GraphQL kwa kujitegemea.
2. Tengeneza Mpango Mpya wa Jedwali
Badilisha msimbo maalum wa Cassandra ili kutumia jedwali lililo na mpango mmoja:
Mwandishi (trustgraph-flow/trustgraph/storage/rows/cassandra/):
Jedwali moja la rows badala ya jedwali kila mpango.
Andika nakala N kwa kila mstari (moja kwa kila fahirisi).
Jisajili kwenye jedwali la row_partitions.
Uundaji rahisi zaidi wa jedwali (usanidi wa mara moja).
Huduma ya Utafiti (trustgraph-flow/trustgraph/query/rows/cassandra/):
Tafuta kwenye jedwali lililo na mpango mmoja la rows.
Tumia moduli iliyochimbwa ya GraphQL kwa uundaji wa mpango.
Usimamizi ulioboreshwa wa vichujio (mechi kamili tu kwenye kiwango cha hifadhidata).
Mabadiliko ya Majina ya Moduli
Kama sehemu ya usafi wa majina kutoka "object" hadi "row":
| Sasa | Mpya |
|---|---|
storage/objects/cassandra/ |
storage/rows/cassandra/ |
query/objects/cassandra/ |
query/rows/cassandra/ |
embeddings/object_embeddings/ |
embeddings/row_embeddings/ |
Moduli Mpya
| Moduli | Lengo |
|---|---|
trustgraph-flow/trustgraph/query/graphql/ |
Utumizi wa pamoja wa GraphQL. |
trustgraph-flow/trustgraph/query/row_embeddings/qdrant/ |
API ya utafiti wa uingishaji wa mstari. |
trustgraph-flow/trustgraph/embeddings/row_embeddings/ |
Hesabu ya uingishaji wa mstari (Hatua ya 1). |
trustgraph-flow/trustgraph/storage/row_embeddings/qdrant/ |
Uhifadhi wa uingishaji wa mstari (Hatua ya 2). |