قاعدة بيانات بتتخزن بالرام بدل الهارد

← العودة
Blog Post

عنوان المحادثة: قاعدة بيانات بتتخزن بالرام بدل الهارد

التاريخ: 16.12.2025

التصنيف: 📊 البيانات وتحليل البيانات

إجمالي الرسائل: 8 | ياسر: 3 | M: 5

Yasser
قاعدة بيانات بتتخزن بالرام بدل الهارد
المحادثة الكاملة - 16.12.2025
M
رح أمسح قاعدة البيانات
16.12.2025 19:22
ياسر
اليوم قرات تحليل بيقول
16.12.2025 19:34
M
ياسر والله ما حقدر اعمل موضوع البيانات والذكاء الاصطناعي
16.12.2025 19:50
M
البيانات وتخزينها و و و
16.12.2025 19:51
M
import jsonimport timefrom pathlib import Pathfrom typing import Dict, List, Optional, Tuplefrom dataclasses import dataclass, asdictfrom collections import defaultdict@dataclassclass SearchResult: """نتيجة بحث واحدة""" keyword: str browse_node: str # 🆕 إضافة browse_node timestamp: float found_products: int valid_products: int # المنتجات الصالحة فعلياً pages_searched: int success: bool def to_dict(self): return asdict(self) @classmethod def from_dict(cls, data): return cls(**data)class SearchMemory: """ نظام ذاكرة ذكي لتسجيل نتائج البحث وتحسينها 🆕 يربط النجاح/الفشل بـ keyword + browse_node معاً """ def __init__(self, memory_file: str = "search_memory.json"): self.memory_file = Path(memory_file) # 🔑 تغيير البنية: keyword -> browse_node -> [results] self.memory: Dict[str, Dict[str, List[SearchResult]]] = defaultdict(lambda: defaultdict(list)) self.load() def _get_key(self, keyword: str, browse_node: str) -> Tuple[str, str]: """توليد مفتاح فريد للكلمة + النود""" return (keyword.lower().strip(), browse_node.lower().strip()) def add_result(self, keyword: str, browse_node: str, found_products: int, valid_products: int, pages_searched: int, success: bool = None): """ تسجيل نتيجة بحث جديدة Args: keyword: الكلمة المفتاحية browse_node: النود المستخدم found_products: عدد المنتجات المُكتشفة valid_products: عدد المنتجات الصالحة pages_searched: عدد الصفحات المفحوصة success: هل البحث ناجح؟ (None = تحديد تلقائي) """ # تحديد النجاح تلقائياً إذا لم يُحدد if success is None: success = valid_products > 0 result = SearchResult( keyword=keyword, browse_node=browse_node, timestamp=time.time(), found_products=found_products, valid_products=valid_products, pages_searched=pages_searched, success=success ) # إضافة للذاكرة kw_lower = keyword.lower().strip() node_lower = browse_node.lower().strip() self.memory[kw_lower][node_lower].append(result) # الحفظ self.save() def get_keyword_node_stats(self, keyword: str, browse_node: str, max_age_hours: int = 168) -> Dict: """ إحصائيات كلمة + نود معينة (آخر أسبوع) Returns: { 'total_searches': int, 'successful_searches': int, 'failed_searches': int, 'success_rate': float, 'avg_valid_products': float, 'last_search_age_hours': float, 'recommended_pages': int } """ kw_lower, node_lower = self._get_key(keyword, browse_node) if kw_lower not in self.memory or node_lower not in self.memory[kw_lower]: return { 'total_searches': 0, 'successful_searches': 0, 'failed_searches': 0, 'success_rate': 0.0, 'avg_valid_products': 0.0, 'last_search_age_hours': None, 'recommended_pages': 3 # افتراضي } results = self.memory[kw_lower][node_lower] # فلترة النتائج الحديثة فقط now = time.time() max_age_seconds = max_age_hours * 3600 recent_results = [r for r in results if (now - r.timestamp) if not recent_results: return { 'total_searches': 0, 'successful_searches': 0, 'failed_searches': 0, 'success_rate': 0.0, 'avg_valid_products': 0.0, 'last_search_age_hours': None, 'recommended_pages': 3 } # الإحصائيات total = len(recent_results)
16.12.2025 20:03
M
max_age_seconds = max_age_days * 24 * 3600 cleaned_count = 0 for keyword in list(self.memory.keys()): for node in list(self.memory[keyword].keys()): original_count = len(self.memory[keyword][node]) self.memory[keyword][node] = [ r for r in self.memory[keyword][node] if (now - r.timestamp) ] cleaned_count += original_count - len(self.memory[keyword][node]) # حذف النود إذا أصبح فارغاً if not self.memory[keyword][node]: del self.memory[keyword][node] # حذف الكلمة إذا أصبحت فارغة if not self.memory[keyword]: del self.memory[keyword] if cleaned_count > 0: self.save() return cleaned_count def save(self): """حفظ الذاكرة للملف""" try: # تحويل البيانات لصيغة قابلة للحفظ data = {} for keyword, nodes in self.memory.items(): data[keyword] = {} for node, results in nodes.items(): data[keyword][node] = [r.to_dict() for r in results] with open(self.memory_file, 'w', encoding='utf-8') as f: json.dump(data, f, indent=2, ensure_ascii=False) except Exception as e: print(f"⚠️ خطأ في حفظ ذاكرة البحث: {e}") def load(self): """تحميل الذاكرة من الملف""" if not self.memory_file.exists(): return try: with open(self.memory_file, 'r', encoding='utf-8') as f: data = json.load(f) # إعادة بناء البنية self.memory = defaultdict(lambda: defaultdict(list)) for keyword, nodes in data.items(): for node, results in nodes.items(): self.memory[keyword][node] = [ SearchResult.from_dict(r) for r in results ] except Exception as e: print(f"⚠️ خطأ في تحميل ذاكرة البحث: {e}") self.memory = defaultdict(lambda: defaultdict(list)) def print_summary(self): """طباعة ملخص الذاكرة""" print("\n" + "="*80) print("🧠 ملخص ذاكرة البحث (Search Memory)") print("="*80) total_keywords = len(self.memory) total_nodes = sum(len(nodes) for nodes in self.memory.values()) total_searches = sum( len(results) for nodes in self.memory.values() for results in nodes.values() ) print(f"📊 الإحصائيات الإجمالية:") print(f" • الكلمات المفتاحية: {total_keywords}") print(f" • النودات المختلفة: {total_nodes}") print(f" • إجمالي البحوث: {total_searches}") if total_keywords > 0: print(f"\n🔝 أفضل 5 كلمات في كل نود:") # جمع جميع النودات all_nodes = set() for nodes in self.memory.values(): all_nodes.update(nodes.keys()) for node in sorted(all_nodes): print(f"\n 📦 النود: {node}") best_keywords = self.get_best_keywords_for_node(node, limit=5) if not best_keywords: print(" (لا توجد بيانات)") continue for idx, (keyword, stats) in enumerate(best_keywords, 1): success_emoji = "✅" if stats['success_rate'] >= 50 else "⚠️" if stats['success_rate'] >= 30 else "❌" print(f" {idx}. {success_emoji} '{keyword}'") print(f" نسبة النجاح: {stats['success_rate']:.1f}% | " f"متوسط المنتجات: {stats['avg_valid_products']:.1f} | " f"الصفحات الموصى بها: {stats['recommended_pages']}") print("="*80 + "\n")
16.12.2025 20:03
ياسر
احذفي قاعدة البيانات
16.12.2025 20:38
ياسر
قاعدة بيانات بتتخزن بالرام بدل الهارد
16.12.2025 20:48
← العودة إلى الرئيسية