2017-02-13 28 views
1

我有一个与elasticsearch和cassandra有很多交互的对象。但我不知道在哪里实例化我的Cassandra和elasticsearch会话。我应该把它放在我的“代码”,以及会话传递到我的函数的参数,这样的:OOP python:在哪里实例化Cassandra和elasticsearch集群?

cassandra_cluster = Cluster() 
session = cassandra_cluster.connect() 
es = Elasticsearch() 

class Article: 

    document_type = "cnn_article" 

    def __init__(self): 
     self.author = "" 
     self.url = "" 
     ... 

    @classmethod 
    def from_crawl(cls, url): 
     obj = cls() 
     # Launch a crawler and fill the fields and return the object 

    @classmethod 
    def from_elasticseacrh(cls, elastic_search_document): 
     obj = cls() 
     # Read the response from elasticsearch and return the object 

    def save_to_cassandra(self): 
     # Save an object into cassandra 
     session.execute(.....) 

    def save_to_elasticsearch(self, index_name, es): 
     # Save an object into elasticsearch 
     es.index(index=index_name, ...) 

    ... 

article = Article.from_crawl("http://cnn.com/article/blabla") 
article.save_to_cassandra(session) 
article.save_to_elasticsearch("cnn", es) 

或者我应该把我的卡桑德拉和elasticsearch会话实例变量这样的实例:

class Article: 

    cassandra_cluster = Cluster() 
    session = cassandra_cluster.connect() 
    es = Elasticsearch() 
    document_type = "cnn_article" 

    def __init__(self): 
     self.author = "" 
     self.url = "" 
     ... 

    @classmethod 
    def from_crawl(cls, url): 
     obj = cls() 
     # Launch a crawler and fill the fields and return the object 

    @classmethod 
    def from_elasticseacrh(cls, elastic_search_document): 
     obj = cls() 
     # Read the response from elasticsearch and return the object 

    def save_to_cassandra(self): 
     # Save an object into cassandra 
     session.execute(.....) 

    def save_to_elasticsearch(self): 
     # Save an object into elasticsearch 
     es.index(....) 

    ... 

article = Article.from_crawl("http://cnn.com/article/blabla") 
article.save_to_cassandra() 
article.save_to_elasticsearch() 

回答