Cassandra分页CPU利用率问题

时间:2018-01-03 17:12:32

标签: python-3.x cassandra

我已经开发了一个用于提取数据的python脚本,但它只使用单个cpu核心,当我做顶级cassandra时使用的是200%以上的cpu。 GC进入画面之间进入空闲状态无法理解如何转换代码以利用多核和并行处理。

class PagedResultHandler(object):

def __init__(self, future):
    self.error = None
    self.finished_event = multiprocessing.Event()
    self.future = future
    self.future.add_callbacks(
        callback=self.handle_page,
        errback=self.handle_error)
    self.rows = []
def handle_page(self, rows):
    self.rows += rows

    if self.future.has_more_pages:
        self.future.start_fetching_next_page()
    else:
        self.finished_event.set()

def handle_error(self, exc):
    self.error = exc
    self.finished_event.set()
start_time = time.time()
cluster = Cluster(contact_points=['127.0.0.1'],protocol_version=4)
session = cluster.connect('unit_test')
query = "select * from "+table_name+" where runseq=0"   
print("--Fired Query--->> ", query)
future = session.execute_async(query)
handler = PagedResultHandler(future) 
handler.finished_event.wait()
data = pd.DataFrame(handler.rows)
print("--- %s seconds ---" % (time.time() - start_time))
if handler.error:
  raise handler.error
cluster.shutdown()

我拉的每个表包含超过300万行,并且有很多性能问题。我可以帮助我如何制作cpu核心并提高性能

1 个答案:

答案 0 :(得分:1)

你不会从python驱动程序中获得惊人的性能,但如果你真的想看到一个可以使用多个核心的快速实现,你可以查看cqlsh的复制函数(https://github.com/apache/cassandra/blob/trunk/pylib/cqlshlib/copyutil.py#L229)。

在C *端确保您有足够的节点和足够的硬件(ssds,多核,> 16gb的ram)。如果使用子8gb堆等,不要期望太多。 Cassandra / JVM(默认设置)旨在尽可能充分利用服务器,而不是共享资源,因此需要高CPU。