Skip to content

Commit

Permalink
Merge pull request #36 from Rucha-Ambaliya/feature/add-indexing
Browse files Browse the repository at this point in the history
Index Strategy and Performance Optimization
  • Loading branch information
Varsha-1605 authored Jan 10, 2025
2 parents 9337e14 + 1504444 commit 47f0669
Showing 1 changed file with 126 additions and 38 deletions.
164 changes: 126 additions & 38 deletions database_setup.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,120 @@
from pymongo import MongoClient, ASCENDING
from pymongo.server_api import ServerApi
import logging
from datetime import datetime
import os
from dotenv import load_dotenv
load_dotenv()

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def setup_product_database():
"""Setup product reference database with sample data"""
uri = "add your string"
uri = os.getenv("MONGODB_URL")

try:
client = MongoClient(uri, server_api=ServerApi('1'))
db = client.social_media_products

# Create collections
product_references = db.product_references
listings = db.listings

# Create indexes
product_references.create_index([("category", ASCENDING)])
product_references.create_index([("subcategory", ASCENDING)])
product_references.create_index([("keywords", ASCENDING)])
product_references.create_index([("brand_options", ASCENDING)])

listings.create_index([("product_id", ASCENDING)])
listings.create_index([("created_at", ASCENDING)])
# Create Image Collections
product_collection = db["products"]
listing_collection = db["listings"]
analytics_collection = db["analytics"]
review_collection = db["reviews"]

# Video Collections
video_collection = db["videos"]
video_listings_collection = db["video_listings"]
video_analytics_collection = db["video_analytics"]

# Create indexes for products
product_collection.create_index([("id", ASCENDING)], unique=True)
product_collection.create_index([("title", ASCENDING)])
product_collection.create_index([("category", ASCENDING)])
product_collection.create_index([("subcategory", ASCENDING)])
product_collection.create_index([("features", ASCENDING)])
product_collection.create_index([("price_range", ASCENDING)])
product_collection.create_index([("created_at", ASCENDING)])
product_collection.create_index([("updated_at", ASCENDING)])
# Create indexes for listings
listing_collection.create_index([("id", ASCENDING), ("product_id", ASCENDING)])
listing_collection.create_index([("product_id", ASCENDING), ("created_at", ASCENDING)])
listing_collection.create_index([("price", ASCENDING), ("updated_at", ASCENDING)])
listing_collection.create_index([("features", ASCENDING), ("title", ASCENDING)])
listing_collection.create_index([("id", ASCENDING)], unique=True)
listing_collection.create_index([("title", ASCENDING)])
listing_collection.create_index([("price", ASCENDING)])
listing_collection.create_index([("features", ASCENDING)], name="features_index")
# Create indexes for analytics
analytics_collection.create_index([("id", ASCENDING), ("product_id", ASCENDING)])
analytics_collection.create_index([("product_id", ASCENDING), ("created_at", ASCENDING)])
analytics_collection.create_index([("id", ASCENDING)], unique=True)
analytics_collection.create_index([("product_id", ASCENDING)], unique=True)
analytics_collection.create_index([("created_at", ASCENDING)])
analytics_collection.create_index([("updated_at", ASCENDING)])
analytics_collection.create_index([("sales_performance.total_sales", ASCENDING)])
analytics_collection.create_index([("sales_performance.revenue", ASCENDING)])
analytics_collection.create_index([("sales_performance.average_price", ASCENDING)])
analytics_collection.create_index([("customer_behavior.view_to_purchase_rate", ASCENDING)])
analytics_collection.create_index([("customer_behavior.repeat_purchase_rate", ASCENDING)])
analytics_collection.create_index([("customer_behavior.average_rating", ASCENDING)])
analytics_collection.create_index([("marketing_metrics.click_through_rate", ASCENDING)])
analytics_collection.create_index([("marketing_metrics.social_media_engagement", ASCENDING)])
# Create indexes for review
review_collection.create_index([("product_id", ASCENDING), ("rating", ASCENDING)])
review_collection.create_index([("user_id", ASCENDING), ("product_id", ASCENDING)])
review_collection.create_index([("id", ASCENDING)], unique=True)
review_collection.create_index([("product_id", ASCENDING)])
review_collection.create_index([("user_id", ASCENDING)])
review_collection.create_index([("rating", ASCENDING)])
review_collection.create_index([("title", ASCENDING)])
review_collection.create_index([("verified_purchase", ASCENDING)])
review_collection.create_index([("created_at", ASCENDING)])
review_collection.create_index([("updated_at", ASCENDING)])

# Create indexes for video
video_collection.create_index([("title", ASCENDING), ("views", ASCENDING)])
video_collection.create_index([("views", ASCENDING), ("rating", ASCENDING)])
video_collection.create_index([("id", ASCENDING)], unique=True)
video_collection.create_index([("title", ASCENDING)])
video_collection.create_index([("category", ASCENDING)])
video_collection.create_index([("subcategory", ASCENDING)])
video_collection.create_index([("duration", ASCENDING)])
video_collection.create_index([("views", ASCENDING)])
video_collection.create_index([("transcript_summary", "text")])
video_collection.create_index([("price_range", ASCENDING)])
video_collection.create_index([("created_at", ASCENDING)])
video_collection.create_index([("updated_at", ASCENDING)])
video_collection.create_index([("key_features", ASCENDING)])
video_collection.create_index([("highlights", ASCENDING)])
# Create indexes for video listing
video_listings_collection.create_index([("product_id", ASCENDING), ("id", ASCENDING)])
video_listings_collection.create_index([("id", ASCENDING)], unique=True)
video_listings_collection.create_index([("product_id", ASCENDING)])
video_listings_collection.create_index([("platform", ASCENDING)])
video_listings_collection.create_index([("title", ASCENDING)])
video_listings_collection.create_index([("views", ASCENDING)])
video_listings_collection.create_index([("rating", ASCENDING)])
video_listings_collection.create_index([("created_at", ASCENDING)])
video_listings_collection.create_index([("updated_at", ASCENDING)])
video_listings_collection.create_index([("product_links.price", ASCENDING)])
# Create indexes for video analytics
video_analytics_collection.create_index([("id", ASCENDING), ("product_id", ASCENDING)])
video_analytics_collection.create_index([("engagement.views", ASCENDING), ("engagement.likes", ASCENDING)])
video_analytics_collection.create_index([("performance.retention_rate", ASCENDING), ("performance.click_through_rate", ASCENDING)])
video_analytics_collection.create_index([("id", ASCENDING)], unique=True)
video_analytics_collection.create_index([("product_id", ASCENDING)])
video_analytics_collection.create_index([("created_at", ASCENDING)])
video_analytics_collection.create_index([("updated_at", ASCENDING)])
video_analytics_collection.create_index([("engagement.views", ASCENDING)])
video_analytics_collection.create_index([("engagement.likes", ASCENDING)])
video_analytics_collection.create_index([("engagement.comments", ASCENDING)])
video_analytics_collection.create_index([("engagement.average_watch_time", ASCENDING)])
video_analytics_collection.create_index([("audience.demographics", ASCENDING)])
video_analytics_collection.create_index([("audience.top_regions", ASCENDING)])
video_analytics_collection.create_index([("performance.retention_rate", ASCENDING)])
video_analytics_collection.create_index([("performance.click_through_rate", ASCENDING)])

# Sample product reference data
sample_products = [
{
Expand Down Expand Up @@ -86,36 +174,36 @@ def setup_product_database():
]

# Clear existing data
product_references.delete_many({})
listings.delete_many({})
# product_references.delete_many({})
# listings.delete_many({})

# Insert sample data
product_references.insert_many(sample_products)
# product_references.insert_many(sample_products)
logger.info("Sample product references inserted successfully")

# Insert sample listings
sample_listings = [
{
"product_id": str(product_references.find_one({"brand_options": "iPhone 15"})["_id"]),
"title": "iPhone 15 Pro Max",
"category": "Electronics",
"subcategory": "Smartphones",
"description": "Latest iPhone with A17 Pro chip and titanium design",
"price": "$999",
"features": [
"48MP Main Camera",
"Titanium Design",
"Action Button"
],
"keywords": ["iphone", "smartphone", "apple"],
"original_caption": "Just got the new iPhone 15 Pro! Amazing camera system!",
"created_at": datetime.utcnow(),
"status": "active"
}
]
# sample_listings = [
# {
# "product_id": str(product_references.find_one({"brand_options": "iPhone 15"})["_id"]),
# "title": "iPhone 15 Pro Max",
# "category": "Electronics",
# "subcategory": "Smartphones",
# "description": "Latest iPhone with A17 Pro chip and titanium design",
# "price": "$999",
# "features": [
# "48MP Main Camera",
# "Titanium Design",
# "Action Button"
# ],
# "keywords": ["iphone", "smartphone", "apple"],
# "original_caption": "Just got the new iPhone 15 Pro! Amazing camera system!",
# "created_at": datetime.utcnow(),
# "status": "active"
# }
# ]

listings.insert_many(sample_listings)
logger.info("Sample listings inserted successfully")
# listings.insert_many(sample_listings)
# logger.info("Sample listings inserted successfully")

except Exception as e:
logger.error(f"Error setting up database: {e}")
Expand Down

0 comments on commit 47f0669

Please sign in to comment.