trustgraph/docs/tech-specs/cassandra-consolidation.he.md
Alex Jenkins 8954fa3ad7 Feat: TrustGraph i18n & Documentation Translation Updates (#781)
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.
2026-04-14 12:08:32 +01:00

339 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
layout: default
title: "מפרט טכני: איחוד תצורת Cassandra"
parent: "Hebrew (Beta)"
---
# מפרט טכני: איחוד תצורת Cassandra
> **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.
**סטטוס:** טיוטה
**כותב:** עוזר
**תאריך:** 2024-09-03
## סקירה כללית
מפרט זה עוסק בדפוסי שמות ותצורות לא עקביים עבור פרמטרי חיבור ל-Cassandra ברחבי בסיס הקוד של TrustGraph. כיום, קיימים שני סכימות שמות פרמטרים שונות (`cassandra_*` לעומת `graph_*`), מה שמוביל לבלבול ולמורכבות תחזוקה.
## הצגת הבעיה
בסיס הקוד משתמש כיום בשתי קבוצות נפרדות של פרמטרי תצורה של Cassandra:
1. **מודולים של Knowledge/Config/Library** משתמשים:
`cassandra_host` (רשימת מארחים)
`cassandra_user`
`cassandra_password`
2. **מודולים של Graph/Storage** משתמשים:
`graph_host` (מאריך יחיד, לעיתים מומר לרשימה)
`graph_username`
`graph_password`
3. **חשיפה לא עקבית דרך שורת הפקודה**:
חלק מהמעבדים (לדוגמה, `kg-store`) אינם חושפים הגדרות Cassandra כארגומנטים של שורת הפקודה
מעבדים אחרים חושפים אותם עם שמות ופורמטים שונים
טקסט העזרה אינו משקף ערכי משתני סביבה ברירת מחדל
שתי קבוצות הפרמטרים מתחברות לאותו кластер Cassandra, אך עם קונבנציות שמות שונות, מה שגורם ל:
בלבול בתצורת משתמשים
עומס תחזוקה מוגבר
תיעוד לא עקבי
פוטנציאל לטעות בתצורה
חוסר יכולת לשנות הגדרות דרך שורת הפקודה בחלק מהמעבדים
## פתרון מוצע
### 1. סטנדרטיזציה של שמות פרמטרים
כל המודולים ישתמשו בשמות פרמטרים עקביים של `cassandra_*`:
`cassandra_host` - רשימת מארחים (מאוחסנת פנימית כרשימה)
`cassandra_username` - שם משתמש לאימות
`cassandra_password` - סיסמה לאימות
### 2. ארגומנטים של שורת הפקודה
כל המעבדים חייבים לחשוף את תצורת Cassandra דרך ארגומנטים של שורת הפקודה:
`--cassandra-host` - רשימה מופרדת בפסיקים של מארחים
`--cassandra-username` - שם משתמש לאימות
`--cassandra-password` - סיסמה לאימות
### 3. חלופה של משתני סביבה
אם לא סופקו פרמטרים של שורת הפקודה, המערכת תבדוק משתני סביבה:
`CASSANDRA_HOST` - רשימה מופרדת בפסיקים של מארחים
`CASSANDRA_USERNAME` - שם משתמש לאימות
`CASSANDRA_PASSWORD` - סיסמה לאימות
### 4. ערכי ברירת מחדל
אם לא צוינו פרמטרים של שורת פקודה ולא משתני סביבה:
`cassandra_host` ברירת המחדל היא `["cassandra"]`
`cassandra_username` ברירת המחדל היא `None` (ללא אימות)
`cassandra_password` ברירת המחדל היא `None` (ללא אימות)
### 5. דרישות טקסט עזרה
הפלט של `--help` חייב:
להציג ערכי משתני סביבה כברירות מחדל כאשר הם מוגדרים
לעולם לא להציג ערכי סיסמה (להציג `****` או `<set>` במקום)
לציין בבירור את סדר הפתרון בטקסט העזרה
דוגמה לפלט עזרה:
```
--cassandra-host HOST
Cassandra host list, comma-separated (default: prod-cluster-1,prod-cluster-2)
[from CASSANDRA_HOST environment variable]
--cassandra-username USERNAME
Cassandra username (default: cassandra_user)
[from CASSANDRA_USERNAME environment variable]
--cassandra-password PASSWORD
Cassandra password (default: <set from environment>)
```
## פרטי יישום
### סדר פתרון פרמטרים
עבור כל פרמטר של Cassandra, סדר הפתרון יהיה:
1. ערך ארגומנט שורת הפקודה
2. משתנה סביבה (`CASSANDRA_*`)
3. ערך ברירת מחדל
### טיפול בפרמטרים של מארחים
הפרמטר `cassandra_host`:
שורת הפקודה מקבלת מחרוזת מופרדת בפסיקים: `--cassandra-host "host1,host2,host3"`
משתנה סביבה מקבל מחרוזת מופרדת בפסיקים: `CASSANDRA_HOST="host1,host2,host3"`
באופן פנימי תמיד מאוחסן כרשימה: `["host1", "host2", "host3"]`
מארח בודד: `"localhost"` → מומר ל-`["localhost"]`
כבר רשימה: `["host1", "host2"]` → משמש כפי שהוא
### לוגיקת אימות
אימות ישמש כאשר גם `cassandra_username` וגם `cassandra_password` מסופקים:
```python
if cassandra_username and cassandra_password:
# Use SSL context and PlainTextAuthProvider
else:
# Connect without authentication
```
## קבצים שיש לשנות
### מודולים המשתמשים בפרמטרים `graph_*` (שיש לשנות):
`trustgraph-flow/trustgraph/storage/triples/cassandra/write.py`
`trustgraph-flow/trustgraph/storage/objects/cassandra/write.py`
`trustgraph-flow/trustgraph/storage/rows/cassandra/write.py`
`trustgraph-flow/trustgraph/query/triples/cassandra/service.py`
### מודולים המשתמשים בפרמטרים `cassandra_*` (שיש לעדכן עם אפשרות חלופה):
`trustgraph-flow/trustgraph/tables/config.py`
`trustgraph-flow/trustgraph/tables/knowledge.py`
`trustgraph-flow/trustgraph/tables/library.py`
`trustgraph-flow/trustgraph/storage/knowledge/store.py`
`trustgraph-flow/trustgraph/cores/knowledge.py`
`trustgraph-flow/trustgraph/librarian/librarian.py`
`trustgraph-flow/trustgraph/librarian/service.py`
`trustgraph-flow/trustgraph/config/service/service.py`
`trustgraph-flow/trustgraph/cores/service.py`
### קבצי בדיקה שיש לעדכן:
`tests/unit/test_cores/test_knowledge_manager.py`
`tests/unit/test_storage/test_triples_cassandra_storage.py`
`tests/unit/test_query/test_triples_cassandra_query.py`
`tests/integration/test_objects_cassandra_integration.py`
## אסטרטגיית יישום
### שלב 1: יצירת כלי עזר להגדרות משותפות
צור פונקציות עזר לסטנדרטיזציה של הגדרות Cassandra בכל המעבדים:
```python
import os
import argparse
def get_cassandra_defaults():
"""Get default values from environment variables or fallback."""
return {
'host': os.getenv('CASSANDRA_HOST', 'cassandra'),
'username': os.getenv('CASSANDRA_USERNAME'),
'password': os.getenv('CASSANDRA_PASSWORD')
}
def add_cassandra_args(parser: argparse.ArgumentParser):
"""
Add standardized Cassandra arguments to an argument parser.
Shows environment variable values in help text.
"""
defaults = get_cassandra_defaults()
# Format help text with env var indication
host_help = f"Cassandra host list, comma-separated (default: {defaults['host']})"
if 'CASSANDRA_HOST' in os.environ:
host_help += " [from CASSANDRA_HOST]"
username_help = f"Cassandra username"
if defaults['username']:
username_help += f" (default: {defaults['username']})"
if 'CASSANDRA_USERNAME' in os.environ:
username_help += " [from CASSANDRA_USERNAME]"
password_help = "Cassandra password"
if defaults['password']:
password_help += " (default: <set>)"
if 'CASSANDRA_PASSWORD' in os.environ:
password_help += " [from CASSANDRA_PASSWORD]"
parser.add_argument(
'--cassandra-host',
default=defaults['host'],
help=host_help
)
parser.add_argument(
'--cassandra-username',
default=defaults['username'],
help=username_help
)
parser.add_argument(
'--cassandra-password',
default=defaults['password'],
help=password_help
)
def resolve_cassandra_config(args) -> tuple[list[str], str|None, str|None]:
"""
Convert argparse args to Cassandra configuration.
Returns:
tuple: (hosts_list, username, password)
"""
# Convert host string to list
if isinstance(args.cassandra_host, str):
hosts = [h.strip() for h in args.cassandra_host.split(',')]
else:
hosts = args.cassandra_host
return hosts, args.cassandra_username, args.cassandra_password
```
### שלב 2: עדכון מודולים באמצעות פרמטרים `graph_*`
1. שנה שמות הפרמטרים מ-`graph_*` ל-`cassandra_*`
2. החלף שיטות `add_args()` מותאמות אישית בשיטות `add_cassandra_args()` סטנדרטיות
3. השתמש בפונקציות העזר לתצורה נפוצות
4. עדכן מחרוזות תיעוד
דוגמה לטרנספורמציה:
```python
# OLD CODE
@staticmethod
def add_args(parser):
parser.add_argument(
'-g', '--graph-host',
default="localhost",
help=f'Graph host (default: localhost)'
)
parser.add_argument(
'--graph-username',
default=None,
help=f'Cassandra username'
)
# NEW CODE
@staticmethod
def add_args(parser):
FlowProcessor.add_args(parser)
add_cassandra_args(parser) # Use standard helper
```
### שלב 3: עדכון מודולים באמצעות פרמטרים `cassandra_*`
1. הוספת תמיכה בארגומנטים משורת הפקודה היכן שחסרים (לדוגמה, `kg-store`)
2. החלפת הגדרות ארגומנטים קיימות ב-`add_cassandra_args()`
3. שימוש ב-`resolve_cassandra_config()` עבור פתרון עקבי
4. הבטחת טיפול עקבי ברשימת השרתים
### שלב 4: עדכון בדיקות ותיעוד
1. עדכון כל קבצי הבדיקה לשימוש בשמות פרמטרים חדשים
2. עדכון תיעוד שורת הפקודה (CLI)
3. עדכון תיעוד API
4. הוספת תיעוד עבור משתני סביבה
## תאימות לאחור
על מנת לשמור על תאימות לאחור במהלך המעבר:
1. **אזהרות הפסקה** עבור פרמטרים `graph_*`
2. **כינוי פרמטרים** - קבלת שמות ישנים וחדשים בתחילה
3. **פריסה מדורגת** על פני מספר גרסאות
4. **עדכוני תיעוד** עם מדריך מעבר
דוגמה לקוד תאימות לאחור:
```python
def __init__(self, **params):
# Handle deprecated graph_* parameters
if 'graph_host' in params:
warnings.warn("graph_host is deprecated, use cassandra_host", DeprecationWarning)
params.setdefault('cassandra_host', params.pop('graph_host'))
if 'graph_username' in params:
warnings.warn("graph_username is deprecated, use cassandra_username", DeprecationWarning)
params.setdefault('cassandra_username', params.pop('graph_username'))
# ... continue with standard resolution
```
## אסטרטגיית בדיקות
1. **בדיקות יחידה** עבור לוגיקת פתרון תצורה
2. **בדיקות אינטגרציה** עם שילובים שונים של תצורות
3. **בדיקות משתני סביבה**
4. **בדיקות תאימות לאחור** עם פרמטרים מיושנים
5. **בדיקות Docker Compose** עם משתני סביבה
## עדכוני תיעוד
1. עדכון כל התיעוד של פקודות שורת הפקודה
2. עדכון תיעוד API
3. יצירת מדריך מעבר
4. עדכון דוגמאות Docker Compose
5. עדכון תיעוד הפניה לתצורה
## סיכונים ודרכי התמודדות
| סיכון | השפעה | דרך התמודדות |
|------|--------|------------|
| שינויים שעלולים לפגוע במשתמשים | גבוהה | יישום תקופת תאימות לאחור |
| בלבול בתצורה במהלך המעבר | בינונית | תיעוד ברור ואזהרות על הפסקה |
| כשלים בבדיקות | בינונית | עדכוני בדיקות מקיפים |
| בעיות בפריסת Docker | גבוהה | עדכון כל דוגמאות Docker Compose |
## קריטריוני הצלחה
[ ] כל המודולים משתמשים בשמות פרמטרים אחידים `cassandra_*`
[ ] כל המעבדים חושפים הגדרות Cassandra באמצעות ארגומנטים של שורת הפקודה
[ ] טקסט העזרה של שורת הפקודה מציג ערכי ברירת מחדל של משתני סביבה
[ ] ערכי סיסמה לעולם אינם מוצגים בטקסט העזרה
[ ] מנגנון החלפה למשתני סביבה פועל כהלכה
[ ] `cassandra_host` מטופל באופן עקבי כרשימה באופן פנימי
[ ] תאימות לאחור נשמרת לפחות עבור 2 גרסאות
[ ] כל הבדיקות עוברות עם מערכת התצורה החדשה
[ ] התיעוד מעודכן במלואו
[ ] דוגמאות Docker Compose עובדות עם משתני סביבה
## ציר זמן
**שבוע 1:** יישום עזר תצורה משותף ועדכון מודולי `graph_*`
**שבוע 2:** הוספת תמיכה במשתני סביבה למודולי `cassandra_*` קיימים
**שבוע 3:** עדכון בדיקות ותיעוד
**שבוע 4:** בדיקות אינטגרציה ותיקון באגים
## שיקולים עתידיים
שקול להרחיב את התבנית הזו לתצורות מסדי נתונים אחרות (לדוגמה, Elasticsearch)
יישום אימות תצורה והודעות שגיאה טובות יותר
הוספת תמיכה בתצורת חיבור בריכת חיבורים של Cassandra
שקול להוסיף תמיכה בקבצי תצורה (.env files)