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/
[![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(比如
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'
`````
写入这些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/