我觉得我的应用程序运行缓慢。我的服务器使用Java,所以除了java本身,我认为运行缓慢的第一个原因是数据库访问的帐户。Hibernate 可以搜索与您正在使用的实体相关联的所有属性,因此我认为它在查找一个实体时可能会发送大量 SQL 语言。如果有大量的并发发生,麻烦就会发生。
@Component("user")
@Entity
@Table(name="users")
public class User implements Serializable{
@Id
@GenericGenerator(strategy="assigned",name="idGenerator")
@GeneratedValue(generator="idGenerator")
private String client_id;
@Column(name="username")
private String username;
@Column(name="password")
private String password;
@Column(name="email")
private String email;
@Column(name="phone")
private String phone;
@Column(name="sex")
private String sex;
@Column(name="birth")
private String birth;
@Column(name="status")
public String status;
@Column(name="isonline")
private String isonline;
@Column(name="province")
private String province;
@Column(name="city")
private String city;
@ManyToOne()
@JoinColumn(name="channel_id")
private Channel channel;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="created_at",updatable=true)
private Date created_at = new Date();
@Column(name="last_login_at")
private Date last_login_at;
@ManyToMany()
@JoinTable(name = "users_labels",
joinColumns = @JoinColumn(name = "client_id"),
inverseJoinColumns = @JoinColumn(name = "label_name"))
@LazyCollection(LazyCollectionOption.FALSE)
private Set<Label> labellist;
@ManyToOne()
@JoinTable(name = "user_topics",
joinColumns = @JoinColumn(name = "client_id"),
inverseJoinColumns = @JoinColumn(name = "huanxin_group_id"))
private Topic topic;
@ManyToMany()
@JoinTable(name="friends",
joinColumns=@JoinColumn(name="client_id"),
inverseJoinColumns=@JoinColumn(name="friend_id"))
@LazyCollection(LazyCollectionOption.FALSE)
private Set<User> friends;
@OneToMany(mappedBy="user")
private Set<FeedBack> feedbacks;
@ManyToMany()
@JoinTable(name="blacklist",
joinColumns=@JoinColumn(name="client_id"),
inverseJoinColumns=@JoinColumn(name="blocker_id"))
@LazyCollection(LazyCollectionOption.FALSE)
private Set<User> blacklist;
public Topic getTopic() {
return topic;
}
public void setTopic(Topic topic) {
this.topic = topic;
}
public Set<Label> getLabellist() {
return labellist;
}
public void setLabellist(Set<Label> labellist) {
this.labellist = labellist;
}
public String getClient_id() {
return client_id;
}
public void setClient_id(String client_id) {
this.client_id = client_id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getIsonline() {
return isonline;
}
public void setIsonline(String isonline) {
this.isonline = isonline;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public Channel getChannel() {
return channel;
}
public void setChannel(Channel channel) {
this.channel = channel;
}
public Date getCreated_at() {
return created_at;
}
public void setCreated_at(Date created_at) {
this.created_at = created_at;
}
public Date getLast_login_at() {
return last_login_at;
}
public void setLast_login_at(Date last_login_at) {
this.last_login_at = last_login_at;
}
public Set<User> getFriends() {
return friends;
}
public void setFriends(Set<User> friends) {
this.friends = friends;
}
public Set<FeedBack> getFeedbacks() {
return feedbacks;
}
public void setFeedbacks(Set<FeedBack> feedbacks) {
this.feedbacks = feedbacks;
}
public Set<User> getBlacklist() {
return blacklist;
}
public void setBlacklist(Set<User> blacklist) {
this.blacklist = blacklist;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((client_id == null) ? 0 : client_id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (client_id == null) {
if (other.client_id != null)
return false;
} else if (!client_id.equals(other.client_id))
return false;
return true;
}
@Override
public String toString() {
return "User [client_id=" + client_id + ", username=" + username
+ ", labellist=" + labellist+ "]";
}
}
就像这样,用户将来包含主题、标签或其他实体。所以我认为不可能消除这种关联。如何改进我的数据库访问以提高访问速度?
影响应用速度的另一个原因可能是我的算法。我使用冒泡排序、选择排序和快速排序。每种排序似乎都在很少的数据上花费很少的时间。但是如果并发发生怎么办?300 个用户可能只花费 20 毫秒,但 300 000 我无法想象。这是我的排序代码:
private static List<Map<String,Object>> sortInteger(List<Map<String,Object>> list){
int index = 0;
int max = 0;
Map<String,Object> temp = new HashMap<String, Object>();
for(int i=0;i<list.size();i++){
for(int j=0;j<list.size()-i-1;j++){
Map<String,Object> pre = (Map<String, Object>) list.get(j);
Map<String,Object> next = (Map<String, Object>) list.get(j+1);
if((Integer)pre.get("sortnum")<(Integer)next.get("sortnum")){
temp = pre;
list.set(j, next);
list.set(j+1,pre);
}
}
}
return list;
}
因此,就上述而言,我需要一些建议来解决我的问题,无论是理论还是代码。