stream framework允许您使用redis构建复杂的feed和缓存结构。

stream_framework的Python项目详细描述


流框架[构建状态](https://travis-ci.org/tschellenbach/stream-framework.svg?branch=master)(https://travis ci.org/tschellenbach/stream framework)
[![PYPI版本](https://badge.fury.io/py/stream framework.svg)(http://badge.fury.io/py/stream framework)



您可以构建"title="您可以构建的内容"/>;
<;/p>;


stream framework是一个python库,它允许您使用cassandra和/或redis构建活动流和新闻源。如果您不使用Python,请查看支持节点、Ruby、PHP、Python、Go、Scala、Java和REST的[流](http://gtStudio.Io/)。
BR/>您可以构建的示例是:
BR/> *活动流,如在GITHUB
上看到的Twitter式新闻订阅。Pinterest
*Facebook风格的新闻提要
*通知系统

(提要通常也称为:活动流、活动提要、新闻流。)




[fashiolista]:http://www.fashiolista.com/
[stream]:http://getstream.io/
[blog]:http://blog.getstream.io/post/98149880113/介绍stream framework
[stream嫒js]:https://github.com/tschellenbach/stream js
[stream嫒python]:https://github.com/tbarbugli/stream php
[stream嫒ruby]:https://github.com/tbarbugli/stream ruby
[fas希奥利斯塔公寓:http://www.fashiolista.com/feed/?feed_type=f
[fashiolista_aggregated]:http://www.fashiolista.com/feed/?feed\u-type=a
[fashiolista(fashiolista)的信息披露:http://www.fashiolista.com/my-style/notification/
[example-app-u-link]:https://github.com/tbarbugli/stream-framework(比如



















<;/a>;


stream framework的作者还提供了用于生成可缩放ne的web服务wsfeeds&activity streams at[getstream.io][stream]
它允许您通过与漂亮且易于使用的rest api交谈来创建提要。客户端、Ruby、PHP、Python、Go、斯卡拉和Java都有可用的客户端。[Get Started](https://getstream.io/getu started/简介)只需点击几下就解释了API的概念。它更易于使用,最多可免费提供300万个feed更新,并为您节省了维护cassandra、redis、faye、rabbitmq和芹菜工人的麻烦。


\stream framework


**建议通过pip安装::

$pip install stream-framework

默认情况下,stream framework不安装redis和cassandra所需的依赖项

**r/>
$pip install stream framework[cassandra]

***安装同时具有redis和cassandra依赖关系的stream framework***


$pip install stream framework[redis,cassandra]


**作者和贡献者**

*thierry schellenbach(getstream.i的thierryo)
*tommaso barbugli(getstream.io的tommaso)
*anislav atanasov
*guyon morée

**资源**


*[文档]
*[错误跟踪器]
*[代码]
*[travis ci]
*[堆栈溢出]

**示例应用程序**

基于流框架的示例应用程序][示例应用程序链接]。

**教程**

*[Pinterest样式的提要示例应用程序][Mellowmorning_example]


[mellowmorning_example]:http://www.mellowmorning.com/2013/10/18/scalable pinterest tutorial feedly redis/
[documentation]:https://stream framework.readthedocs.org/
[bug tracker]:https://github.com/tschellenbach/stream framework/issues
[code]:http://github.com/tschellenbach/stream framework
[travis ci]:http://travis ci.org/tschellenbach/stream framework/
[stackoverflow]:http://stackoverflow.com/questions/taged/stream framework

因此,让我们为您刚刚固定的项目创建一个活动。

`` python
来自stream_framework.activity import activity



def create_activity(pin):
activity=activity(
pin.user_id,
pinverb,
pin.id,
pin.influencer_id,
time=make_naiver(pin.created_at,pytz.utc),
extra_context=dict(item_id=pin.item_id

返回活动
````

下一步我们要开始在多个订阅源上发布此活动。
首先我们要将其插入您的个人订阅源,然后再插入您的关注者订阅源。
让我们从定义这些订阅源开始。

``python

ream_framework.feed s.redis导入redis feed



class user pinfeed(pinfeed):
key_format='feed:user:%(user_id)s'


key_format='feed:normal:%(user_id)s'
`````

写入这些feed非常简单。例如,要写入用户13的feed,可以执行

``python


feed=userpinfeed(13)
feed.add(activity)
````

我们要发布到所有跟随您的用户的feed。
此操作称为扇出,并在manager类中抽象出来。
我们需要对manager类进行子类划分,并告诉它如何确定哪些用户跟随我们。

```python


管理者(管理者):
feed_classes=dict(
normal=pinfeed,

user_feed_classes=userpinfeed

def add_pin(self,pin):
activity=pin.create_activity()
add user activity将其添加到用户feed,并启动扇出
self.add_user_activity(pin.user_id,activity)

def get_user_follower_id(self,user_id):
ids=follow.objects.filter(target=user_id).values_list('user_id',flat=true)
return{fanopupriority.high:ids}

manager=pinmanager()
``````

manager.add_pin(pin)
```

在django(或任何其他框架)中,您现在可以显示用户提要。

``python
`django示例

@login\u required
def feed(请求):
'
'
'
'
'
context=requestcontext(请求)
feed=manager.get\feeds(request.user.id)['normal']
activities=list(feed[:25])
context['activities']=activities
response=render_to_response('core/feed.html',context)
return response

````

本例仅简要介绍了stream framework的工作原理。
read the docs可以找到完整的解释。



stream framework使用cElery和Redis/Cassandra将构建一个具有大量写操作和极少量读操作的系统。
它的特点是:

-异步任务(所有繁重的任务都发生在后台,用户不必等待)
-可重用组件(您需要使tr根据您的用例,stream framework不会妨碍您的工作)
-完全支持cassandra和redis
-cassandra存储使用新的cql3和python驱动程序包,使您能够访问最新的cassandra功能。
-为性能卓越的cassandra构建2.1。2.2和3.3也通过了测试套件,但没有生产经验。



数据库回退,与Fashiolista的旧方法非常相似。

[twitter_]:http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active-users.html

[etsy feed scaling][etsy]
(Gearman,单独的评分和聚合步骤,汇总-aggRegation第二部分)

[etsy]:http://www.slideshare.net/danmckinley/etsy activity feed s architecture/

[linkedin]:https://engineering.linkedin.com/blog/2016/03/followfeed——linkedin-s-feed-made-faster-and-smarter
[linkedin排名feeds][linkedin]

[facebook]:http://www.infoq.com/presentations/facebook软件栈http://justquick.github.com/django activity stream/


[django project with good naming conventions][django project]


[activity strea.ms/specs/atom/1.0/
[活动流规范][活动流]

[Quora关于最佳实践的帖子][Quora]

[Quora]:http://www.quora.com/what-are-best-practices-for-building-something-like-a-news-feed?q=news+feeds

[Quora扩展社交网络feed][Quora2]

[Quora2]:http://www.quora.com/what-are-the-scaling-issues-to-keep-in-mind-while-developing-a-social-network-feed

[Redis Ruby示例][RedisRuby]

[RedisRuby]:http://blog.waxman.me/how-to-build-a-fast-nredis中的ews feed

[friendfeed approach][friendfeed]

[friendfeed]:http://backchannel.org/blog/friendfeed schemales mysql

[thoonk setup][thoonk]

[thoonk]:http://blog.thoonk.com/

[yahoo研究论文]

[yahoo]:http://jeffterrace.com/docs/feeding-frenzy-sigmod10-web.pdf

[twitter的方法][twitter]

[twitter]:http://www.slideshare.net/nkallen/q-con-3770885

[cassandra at instagram][instagram]

[instagram]:http://planetcassandra.org/blog/post/instagram-making-the-switch-to-cassandra-from-redis-75-instasavings

[etsy相关度][etsy相关度]
[etsy相关度]:http://mimno.infosci.cornell.edu/info6150/readings/p1640 hu.pdf

[zite architecture overview][zite]
[zite]:http://blog.zite.com/2012/01/11/zite under the hood/

[es排名feed]
[es]:https://speakerdeck.com/viadeoteam/a-personalized-news-feed

[riak at xing-作者stefan kaes&sebastian róbke博士][xing]
[xing]:https://www.youtube.com/watch?v=38yku5hr tm

[riak和scala在yammer][yammer]
[yammer]:http://basho.com/posts/business/riak-and-scala-at-yammer/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java FSReadOnlyChiveFileSystem异常   java增量和减量不起作用   java PigLatin语句转换器方法给出了“indexoutofboundsexception”错误等   java从使用布局的页面适配器中删除特定位置页面。刷卡   api查看java源代码有任何规定的方式吗?   快速查找表中的行的java算法   web服务单击将SOAP wsdl转换为JAXB java类   java后转换完成不工作   java访问文件并只提取带注释的方法,从而进一步处理它们   java使用JDBC从SQL INSERT获取序列   java ECLIPSE:构建失败   处理对命令行的读/写操作。exe Java   java遇到过早的文件结束异常   java unity使用Xamarin吗?   java之间的区别是什么:使用JFrame类中的getContentPane()和JRootPane中的getContentPane()?   用于Java正则表达式语法的正则表达式ANTLR语法   java hibernate。cfg。即使在运行mvn hibernate3:hbm2cfgxml时,也没有创建xml   eclipse如何将数据写入Java文件中的特定行号