这是一个关于最佳实践的问题,我知道有很多不同的选择可以做到这一点,但我想你的意见如何解决这个问题.请将其视为在此系统中性能至关重要,换句话说,可扩展.
我最近发现了图形数据库的奇迹,所以我想出了一个公司想要管理它的客户关系的理论情况,为了做到这一点,他们将使用neo4j,这是伟大的,并允许真正伟大的管理客户,不同员工及其关系,这一切都很棒,但公司现在想要创建一个需要身份验证的基于Web的界面,neo4j数据库中的任何人都应该能够登录系统才能看到它们如何与公司数据库中的其他人相关联,因此每个用户必须具有与其姓名相关联的密码/电子邮件/ ID.
所以我的问题是,在这种情况下,最好将password_hash/password_salt/id/email存储在mysql数据库中,然后根据节点在mysql数据库中查找它.或者将password_hash/password_salt/id/email存储在节点内的哈希表中更好.
此外,每个商店都有1000多种产品,它们可以存储在图形数据库中,或者我可以将产品存储在mysql数据库中,然后在那里查找产品,并在那里进行更改,因为产品彼此无关,所以没有必要将它们存储在图形数据库中,那么它们是否应该存储在那里以提高性能?
所以我的问题归结为:大型项目最好是使用图形数据库以及更常见的rdms数据库,如mysql?如果没有,那么你开始使用这两个数据库系统的重点是什么?
因缺乏有关数据库术语的知识而提前道歉.
我正在尝试使用ADB创建Android设备的备份.
但adb backup -all给了我这个错误:adb: unable to connect for backup
为什么我收到此错误?
我知道有些设备要求获得许可,它会询问您是否要允许电脑进行备份,但我的设备不是.
我正在开发Android设备,我不在乎弄乱它 - 所以你能告诉我如何让我的设备请求许可,甚至我如何解决这个问题
我可以使用adb shell,它工作正常,adb pull/push但我想要备份文件,所以我真的希望adb备份工作.
有没有其他方法来拍摄整个Android操作系统和应用程序和设置的图像?(最好是如果你可以指出我可以找到解决问题的方向,我说,但我对其他想法持开放态度.)
谢谢!
我正在尝试制作一个p2p应用程序,只发送短信.我这样做的方法是让服务器在应用程序运行时一直运行,并且连接到其他节点服务器的客户端发送消息.出于测试目的,我正在使用localhost,即与自己交谈.
所以我有以下内容:
from twisted.internet import reactor
from mylib import MessageSFactory
def send_message(message):
reactor.connectTCP("localhost", 8080, MessageCFactory(message))
reactor.listenTCP(8080, MessageSFactory())
reactor.connectTCP("localhost", 8080, MessageCFactory("this message gets received"))
reactor.run()
send_message("this message doesn't")
Run Code Online (Sandbox Code Playgroud)
然而问题是send_message在reactor.run看起来没有效果之后调用(最后一行).
问题是我只需要connectTCP在用户填写消息时运行tcp客户端part()并发送它.所以我试着通过电话来做到这一点send_message.那么如何修复上面的代码才能使其工作?
从我到目前为止所读到的,使用LoopingCall将是要走的路,但我必须将客户输入的新消息存储到变量中,并不断检查该变量是否有新消息而不是运行send_message这将导致用户输入和函数回调,这是我最好的选择吗?
在这种情况下还有其他方法吗?或者我对扭曲的架构的一些关键部分缺乏了解?
编辑:根据要求,这是GUI代码,它从客户端获取消息输入:
from Tkinter import *
def send_message():
print("message: %s" % (e1.get()))
master = Tk()
Label(master, text="Message").grid(row=0)
e1 = Entry(master)
e1.grid(row=0, column=1)
Button(master, text='Send', command=send_message).grid(row=3, column=1, sticky=W, pady=4)
mainloop()
Run Code Online (Sandbox Code Playgroud)
谢谢
所以我在bash上运行这个:
# somedevice -getevent
Run Code Online (Sandbox Code Playgroud)
这个命令的作用就是它一直在运行,每当我的设备发送某个数据时,说它检测到温度的变化,它输出这样的东西
/dev/xyz: 123 4567 8910112238 20
/dev/xyz: 123 4567 8915712347 19
/dev/xyz: 123 4567 8916412345 22
/dev/xyz: 123 4567 8910312342 25
/dev/xyz: 123 4567 8910112361 18
/dev/xyz: 123 4567 8910112343 20
Run Code Online (Sandbox Code Playgroud)
这只是一直运行,一旦有任何原因它输出一些东西.所以执行无止境.
没有回声正常工作,但是当我尝试使用'>'运算符时,这似乎不会写入文件.
所以举个例子
#somedevice -getevent > my_record_file
Run Code Online (Sandbox Code Playgroud)
这不能正常工作,my_record_file只能间隔地写入数据,但是我想立即写入.
有任何想法吗?
环境:Ubuntu 16.04,用c语言编写的守护进程,使用systemd进行进程管理。
所以我的单位文件为:
[Unit]
Description=Fantastic Service
After=network.target
[Service]
Restart=always
Type=forking
ExecStart=/opt/fan/tastic
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
在我的 tastic.c 代码中,它基本上 fork() X 个子进程,每个进程都执行 so_reuseport,然后主进程退出,让子进程处理请求。
通过上述设置,它工作正常,并且我得到了预期的行为。
但是,如果我将 PIDFile 放入服务单元文件中,我会发现我的应用程序提供的 pid 不存在,事实确实如此 - 因为我的主进程在启动请求数量的子进程后退出。
现在,在 systemd 文档中,它明确指出,如果您执行 Type=forking,则应该提供 PIDFile,但问题是,当有多个子进程并且主父进程一旦子进程退出时,我应该如何提供单个 pid 文件开始?
我错过了什么吗?
环境:Ubuntu 16.04 - Linux,使用GCC编译C++ 11.软件不需要跨平台 - 但在其任务中是高效的,并且是一个优秀的守护进程.
我目前有一个简单的应用程序,它基本上充当第三方服务和websocket连接之间的中介.所以用户通过websocket连接我的服务与所述第三方服务交谈.
| End-User | <-C1-> | My Application | <-C2-> | 3rd Party Service |
Run Code Online (Sandbox Code Playgroud)
我的应用程序目前有2个主线程:
线程1 - 收听websocket连接,每当收到消息时,它会将包含消息的对象和请求所述消息的websocket连接推送到fifo任务队列.
线程2 - 循环显示消息队列,并弹出消息并对其进行处理
问题是线程1非常快,并且可以轻松处理100个websocket连接.线程2有时阻塞任务并且可能很慢,因为所述第三方服务的某些队列项处理需要一段时间.这意味着,如果用户A确实请求1(需要5秒钟响应),而后来用户B发出请求2,则必须等待用户A的请求1完成,即使请求2花费不到1毫秒.
我建议的解决方案是:
线程1可以轻松处理100个websocket连接,并且每个连接可以请求任务可能需要1ms到1分钟.所有线程3 - 100都在睡觉.这么多线程的原因是因为如果有50-60个连接都会产生不同的长时间运行请求,那么这些耗时调用中的每一个只会阻塞一个线程,其他线程仍然可以自由地在队列上工作,并且做其他任务.
我知道切换线程是一个密集型操作,但我不知道除了mulithreading之外的任何其他方法.
我用单个线程解决了同样的问题 - 但问题是服务器在等待第三方服务时阻止处理任何websocket消息.所以我把它碰到了两个线程 - 一个用于websocket,另一个用于处理任务队列.但现在问题是任务队列上的单个工作人员很慢,因为它正在顺序处理阻塞IO操作.
这听起来像是一个糟糕的设计理念吗?对最佳实践的任何想法?